基于glib2.12.13编译出现的问题总结
***************************************************************************************************************************
作者:EasyWave 时间:2013.10.06
类别:Linux 应用glib2.12.13 声明:转载,请保留链接
注意:如有错误,欢迎指正。这些是我学习的日志文章......
***************************************************************************************************************************
一:Glib简介
glib库是Linux平台下最常用的C语言函数库,它具有很好的可移植性和实用性。glib是Gtk+库和Gnome的基础。glib可以在多个平台下使用,比如Linux、Unix、Windows等。glib为许多标准的、常用的C语言结构提供了相应的替代物。如果有什么东西本书没有介绍到,请参考glib的头文件:glib.h。glib.h中的头文件很容易理解,很多函数从字面上都能猜出它的用处和用法。如果有兴趣,glib的源代码也是非常好的学习材料。
glib的各种实用程序具有一致的接口。它的编码风格是半面向对象,标识符加了一个前缀“g”,这也是一种通行的命名约定。
使用glib库的程序都应该包含glib的头文件glib.h。如果程序已经包含了gtk.h或gnome.h,则不需要再包含glib.h。
二:Glib库的编译
要想在编译Glib不出现错误,首先需要确定你的嵌入式交叉编译器中是否包含gettext和libiconv,如果你的交叉编译工具中没有这两个库的话,那么编译的过程中会出现以下的错误:
1):gettext错误
You must have either have gettext support in your C library, or use the
GNU gettext library. (http://www.gnu.org/software/gettext/gettext.html
就算是你的主机host中已经安装了gettext的话,也还是会提示此类错误,因此需要首先确定你的嵌入式交叉编译工具中是否包含了gettext。
2): libiconv无法找到iconv.h头文件
如果你的交叉编译工具中没有包含libiconv的话,那么会提示iconv.h无法找到的问题,因此如果交叉编译工具中没有的话,就需要下载libiconv自行编译
3):cannot run test program while cross compiling
对于这个问题,需要仔细看看configure文件,有哪些会提示这类错误,我这里通过修改如下几项就不会提示这类错误了,如下:
echo glib_cv_stack_grows=no
echo ac_cv_type_long_long=yes
echo glib_cv_uscore=no
echo ac_cv_func_posix_getpwuid_r=yes
三:编译选项设置
#!/bin/bashif [ "$1" == "" ]; thenINSTALL_PATH=`pwd`/_installelseif [ -d $1 ]; thenINSTALL_PATH=$1elseexit 1fifimkdir -p $INSTALL_PATHexport LDFLAGS="-L$INSTALL_PATH/lib -L/usr/local/arm_linux_4.2/arm-none-linux-gnueabi/lib"export CFLAGS="-I$INSTALL_PATH/include"export PKG_CONFIG_PATH="$INSTALL_PATH/lib/pkgconfig" export LIBS="-lasprintf -lgettextpo -lgettextsrc -lgettextlib -lintl"#autoreconf -ivfif [ -f config.h ]; thenmake distcleanfiecho glib_cv_stack_grows=no>arm-linux.cache && echo ac_cv_type_long_long=yes>>arm-linux.cache &&echo glib_cv_uscore=no>>arm-linux.cache &&echo ac_cv_func_posix_getpwuid_r=yes>>arm-linux.cache&&./configure --prefix=$INSTALL_PATH \ --host=arm-none-linux-gnueabi \ --build=i486-linux-gnu \ --cache-file=arm-linux.cache \ --enable-maintainer-mode \ --enable-debug=no \ --enable-ansi=no \ --enable-gc-friendly \ --disable-mem-pools \ --enable-threads \ --disable-rebuilds \ --disable-largefile \ --enable-shared=yes \ --enable-static=no \ --enable-fast-install=yes \ --disable-libtool-lock \ --disable-gtk-doc \ --with-gnu-ldif [ $? -eq 0 ]; then make if [ $? -eq 0 ]; then make install exit 0 fifiexit 1
编译之后的library如下:
四:总结
我在编译glib的时候,开始出现问题的地方始终是在gettext,由于我的交叉编译工具中并没有gettext,所以需要重新编译一份gettext,我这里选用的版本是:gettext0.14.2版本,这是由于我的交叉编译工具的原因,无法选用更高版本的。