因为需要在海思平台上开发蓝牙 功能,在编译bluez的时候,bluez依赖glib,这里花了三天时间才终于才成功编译,所以在这里做一个编译glib的总结。
平台:Hi3559V200
编译工具:arm-himix100-linux-gcc
如图,glib依赖Zlib、libffi和gettext,编译glib前需要先编译三个依赖程序。
上图是我使用的glib及其依赖库版本,如果版本不匹配,有可能导致编译失败;编译前先将所有依赖程序源码以及glib源码下载好,在同目录下创建_install存放头文件和库文件,以下为具体编译流程。
Zlib编译:
./configure -prefix=$PWD/../_install
make
make install
Zlib编译要注意,如果是嵌入式环境,需要修改编译工具为对应的交叉编译工具链,使用configure将Makefile生成后,打开Makefile,将其中的gcc、g++等修改为平台使用的交叉编译工具,如gcc改为arm-himix100-linux-gcc等,有ar命令等也要修改。
libffi编译:
源码下载路径:
https://github.com/libffi/libffi/tree/v3.0.13
./configure --host=arm-himix100-linux --prefix=$PWD/../_install
make
make install
gettext编译:
源码下载路径:
https://ftp.gnu.org/pub/gnu/gettext/
./configure --prefix=$PWD/../_install --host=arm-himix100-linux CC=arm-himix100-linux-gcc CXX=arm-himix100-linux-g++ CFLAGS="-fPIC"
make
make install
glib编译:
源码下载路径:
https://download.gnome.org/sources/glib/2.40/
./configure --host=arm-himix100-linux --prefix=$PWD/../_install CPPFLAGS=-I$PWD/../_install/include LDFLAGS=-L$PWD/../_install/lib PKG_CONFIG_PATH=$PWD/../_install/lib/pkgconfig glib_cv_stack_grows=no glib_cv_uscore=yes ac_cv_func_posix_getpwuid_r=yes ac_cv_func_posix_getgrgid_r=yes
make
make install
glib编译后即可成功,可在_install中查看编译的库和头文件等;在编译glib的时候一直有一个gettext的报错,这个报错导致我编译glib花了三天时间,如下:
从报错来看,是找不到gettext工具或者需要连接交叉编译得到gettext库,在网上查询的时候,很多说在ubuntu上使用apt-get install gettext即可,我安装后还是有这个错误,然后也有说不能使用apt-get 来安装,需要下载gettext源码,然后在手动安装的,但是都不行,后面我测试的时候,才发现,如果下载了源码,交叉编译成功后,需要在编译glib的时候,将gettext的头文件和库文件路径都需要指定才行,发现自己还真是经验太少,平时当一个摸鱼十级的程序员真是太合格了。
gettext编译的报错修改好以后,编译的时候又遇到了
gdate.c:2497:7: error: format not a string literal, format string not checked [-Werror=format-nonliteral]
报错,查询后发现是gcc6以后的版本编译检查严格了,将Warning警告改为直接报错,我的修改方式是将gdate.c文件中在报错函数前添加:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored “-Wformat-nonliteral”
在报错函数后添加:
#pragma GCC diagnostic pop
修改后glib编译即可成功。
其实如果感觉修改c文件比较麻烦,可以直接修改Makefile,将
format-nonliteral
的报错屏蔽掉,同样也能解决。
以上就是本人编译glib中编译和遇到的问题总结。