海思平台编译glib库

  • Post author:
  • Post category:其他


因为需要在海思平台上开发蓝牙 功能,在编译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


的报错屏蔽掉,同样也能解决。

或者参考大神详细分享文章:

https://blog.csdn.net/wwwyue1985/article/details/113359706?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163869061416780357215712%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=163869061416780357215712&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-113359706.first_rank_v2_pc_rank_v29&utm_term=gdate.c%3A2497%3A7%3A+error%3A+format+not+a+string+literal%2C+format+string+not+checked&spm=1018.2226.3001.4187

以上就是本人编译glib中编译和遇到的问题总结。



版权声明:本文为weixin_43589918原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。