Glib 2.45.3 交叉编译完整版
补充:后来又测试了 glib2.47.3 也是可行的。
一、前言
glib是拥有良好的系统调度函数,以及完整的数据结构,对于嵌入式开发者,有很大的帮助。
二、源码包及下载路径
1.源码包 zlib-1.2.8 libffi-3.2.1 glib-2.45.3
2.下载路径(需要不同版本,自行下载):
http://www.zlib.net/fossils/
http://ftp.gnome.org/pub/gnome/sources/glib/2.45/
三、工具及交叉编译环境
Ubuntu 16.04 交叉编译环境:arm-linux-gnueabihf
辅助工具:
为了更好地在编译时使用自定义安装路径里的库,我们使用pkg-config来辅助我们编译glib,但要运行pkg-config,首先需要制作xx.pc文件:
我们先来到安装目录下的lib/pkgconfig目录下,里面有一个libffi.pc文件,由于这个库是给arm用的,所以我习惯在文件名后加上-arm:cp libffi.pc libffi-arm.pc然后将libffi-arm.pc拷贝到/usr/local/lib/pkgconfig/下:cp libffi-arm.pc /usr/local/lib/pkgconfig/这样pkg-config命令就可以识别到这个文件,大家可以先键入pkg-config --cflags libffi-arm看看会打印出什么呢?
四、交叉编译
1.Libffi
将源码包解压在工作路径下:
tar xvaf glib-2.45.3.tar.xz libffi-3.2.1.tar.gz -C ../build/
cd libffi-3.2.1
输入命令:
CC=/home/dell/workspace/RMS-401-JK01/myir/MYS-6ULX-20170921-m58/03-Tools/Toolchain/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc \
./configure --prefix=/home/dell/personal/liuruipeng/lib/build/zlib-1.2.8/install/arm/
等待配置完成
make
make insatall
将在=/home/dell/personal/liuruipeng/lib/build/libffi-3.2.1/install/arm/目录下生成库和相关头文件
其中最重要的一条:
cd /home/dell/personal/liuruipeng/lib/build/libffi-3.2.1/install/arm/lib/ipkgconfig/
cp libffi.pc libffi-arm.pc
cp libffi-arm.pc /usr/lib/pkconfig/
输入pkg-config --cflags libffi-arm则会输出环境路径 说明成功
补充:将/home/dell/personal/liuruipeng/lib/build/libffi-3.2.1/install/arm/lib/下的libffi.so libffi.so.6.04 libffi.so.6拷贝到交叉编译器所在的lib库目录,具体与libc.so在同一个目录
输入如下命令:
cd /home/dell/personal/liuruipeng/lib/build/libffi-3.2.1/install/arm/lib/ cp -a libfi.so* /home/lrp/myir/MYS-Tools/03-Tools/Toolchain/arm-linux-gnueabihf/libc/lib/
完事!!!
2.Zlib
将源码包解压在工作路径下:
tar xvaf zlib-1.2.8.tar.gz -C ../build/
cd zlib-1.2.8
输入命令:
./configure --prefix=/home/dell/personal/liuruipeng/lib/build/libffi-3.2.1/install/arm/ \
CC=/home/dell/workspace/RMS-401-JK01/myir/MYS-6ULX-20170921-m58/03-Tools/To olchain/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc \
--host=arm-linux
等待配置完成:
make
make install
将在=/home/dell/personal/liuruipeng/lib/build/libffi-3.2.1/install/arm/目录下生成库和相关头文件
照葫芦画瓢参考libffi移植最后一条:
cd /home/dell/personal/liuruipeng/lib/build/zlib-1.2.8/install/arm/lib/ipkgconfig/
cp zlib.pc zlib-arm.pc
cp zlib-arm.pc /usr/lib/pkconfig/
输入pkg-config --cflags zlib-arm则会输出环境路径 说明成功
补充:将/home/dell/personal/liuruipeng/lib/build/zlib-1.2.8/install/arm/lib/下的libz.so libz.so.1.2.8 libz.so.1拷贝到交叉编译器所在的lib库目录,具体与libc.so在同一个目录
输入如下命令:
cd /home/dell/personal/liuruipeng/lib/build/zlib-1.2.8/install/arm/lib/ cp -a libz.so* /home/lrp/myir/MYS-Tools/03-Tools/Toolchain/arm-linux-gnueabihf/libc/lib/
完事!!!
3.Glib
这个东西是最头疼的,我弄了好久好久,网上也没有特别完整的关于它移植的资料介绍,话不多说,开干
解压:
tar xvaf glib-2.45.3.tar.xz -C ../build
cd glib-2.45.3
添加有关配置文件Vim glib.cache
复制下面内容保存:
glib_cv_long_long_format=ll
glib_cv_stack_grows=no
glib_cv_have_strlcpy=no
glib_cv_have_qsort_r=yes
glib_cv_va_val_copy=yes
glib_cv_uscore=no
glib_cv_rtldglobal_broken=no
ac_cv_func_posix_getpwuid_r=yes
ac_cv_func_posix_getgrgid_r=yes
保存关闭
输入(注意大家目录可能会与我的目录有所不同,自行修改,不然刚才你所做的努力都白费了):
./configure --prefix=/home/dell/personal/liuruipeng/lib/build/glib-2.45.3/install/arm \
CC=/home/dell/workspace/RMS-401-JK01/myir/MYS-6ULX-20170921-m58/03-Tools/Toolchain/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc \
--host=arm-linux LIBFFI_CFLAGS="-I/home/dell/personal/liuruipeng/lib/build/libffi-3.2.1/install/arm/lib/libffi-3.2.1/include" \
LIBFFI_LIBS="-lffi-L/home/dell/personal/liuruipeng/lib/build/libffi-3.2.1/install/arm/lib" ZLIB_CFLAGS="-I/home/dell/personal/liuruipeng/lib/build/zlib-1.2.8/install/arm/include" \
ZLIB_LIBS="-lz -L/home/dell/personal/liuruipeng/lib/build/zlib-1.2.8/install/arm/lib" --cache-file=glib.cache \ --disable-selinux --disable-xattr --disable-libelf
然后就是大家熟悉的
make
make install
Ok!!!! 大功告成
剩下来就是将编译好的文件移植到开发板系统下
五、glib移植开发板
编译好的文件都存在目录:/home/dell/personal/liuruipeng/lib/build/glib-2.45.3/install/arm/
下
移植步骤:
1.进入目录 cd /home/dell/personal/liuruipeng/lib/build/glib-2.45.3/install/arm/lib
2.复制
cp -a libglib-2.0* /nfs/roofts/lib(开发板的lib目录)
3.删除
rm /home/dell/personal/liuruipeng/lib/build/glib-2.45.3/install/arm/lib/libglib-2.0.la
4.完成移植
六、交叉编译程序
我的交叉编译器:arm-linux-gnueabihf-gcc
交叉编译时就需要用到我们自己刚才交叉编译过的glib库
具体编译命令如下:
编译:
arm-linux-gnueabihf-gcc -o test2 test2.c \
-I/home/dell/personal/liuruipeng/lib/build/glib-2.45.3/install/arm/include/glib-2.0 \
-I/home/dell/personal/liuruipeng/lib/build/glib-2.45.3/install/arm/lib/glib-2.0/include \
-L/home/dell/personal/liuruipeng/lib/build/glib-2.45.3/install/arm/lib \
-lglib-2.0\
生成:test2可执行文件,拷贝到开发板目录下,执行,OK!!成功
补充:交叉编译glib-2.48.2
增加依赖 pcre-8.38
交叉编译pcre-8.38
解压源码:
tar xvaf pcre-8.38.tar.gz build/
cd pcre-8.38
./configure \
--prefix=/home/dell/workspace/RMS-401-JK01/myir/MYS-6ULX-20170921-m58/03-Tools/Toolchain/arm-linux-gnueabihf/libc/usr/ \
CC=/home/dell/workspace/RMS-401-JK01/myir/MYS-6ULX-20170921-m58/03-Tools/Toolchain/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc \
--host=arm-linux-gnueabihf
Make
Make install
成功,交叉编译器的库里就有了pcre ok
再进入glib-2.48.2版本的交叉编译 成功