glib交叉编译过程 (2012-08-15 17:32)

本文详细介绍了glib-2.24.0在ARM环境下使用GCC 3.4.6进行交叉编译的过程,包括配置环境变量、解决编译过程中出现的问题及所需配置项等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

glib-2.24.0交叉编译过程


硬件环境arm, gcc编译器版本3.4.6
编译主机环境: 2.6.32-21-generic #32-Ubuntu SMP  i686 GNU/Linux


1:执行autogen.sh
2:配置cache-file,具体配置项如下:
glib_cv_long_long_format=ll
glib_cv_stack_grows=no
glib_cv_working_bcopy=yes
glib_cv_sane_realloc=yes
glib_cv_have_strlcpy=no
glib_cv_va_val_copy=yes
glib_cv_rtldglobal_broken=yes
glib_cv_uscore=yes
ac_cv_func_posix_getpwuid_r=yes
ac_cv_func_nonposix_getpwuid_r=yes
ac_cv_func_posix_getgrgid_r=yes
glib_cv_use_pid_surrogate=yes
ac_cv_func_printf_unix98=no
ac_cv_func_vsnprintf_c99=no

保存为文件arm-linux.cache

3:编译过程中会出现以下错误情况:
1)“checking for msgfmt... no
configure: error:
*** 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
解决方法:安装gettest,apt-get install gettext
2) “checking for growing stack pointer... configure: error: in `/root/glib-2.24.0':
configure: error: cannot run test program while cross compiling
解决方法:glib_cv_stack_grows=no
3)“checking for glib-genmarshal... no
configure: error: Could not find a glib-genmarshal in your PATH
解决方法:apt-get install libglib2.0-dev


4: 在glib目录下,执行“./configure --host=arm-etone-linux-gnueabi CC={交叉gcc编译器所在路径}/bin/arm-linux-gcc --cache-file=arm-linux.cache --prefix=/root/glib/install " 命令,配置编译的环境。

4: 修改glib目录下的libtool脚本,由于默认的一些命令可能与本机的有所出入,所以需要参考/usr/bin/libtool的脚本,把NM和global_symbol_pipe的定义修改为“/usr/bin/libtool”脚本中的定义。

5:执行”make“命令,编译完毕。


这个过程磨了很久才出来的,唉,对脚本还不是很熟练!



PS: 编译glib-2.29.16时,需要增加
ac_cv_path_GLIB_COMPILE_SCHEMAS=yes ac_cv_func_qsort_r=yes
两个配置项,并且安装libffi库。

### glib-2.58.3 交叉编译方法 glib-2.58.3 的交叉编译过程glib-2.45.3 类似,但需要特别注意版本更新带来的变化以及可能的依赖项调整。以下是完整的交叉编译流程和注意事项。 #### 环境准备 1. 确保安装了必要的工具链和依赖库,例如 `autoconf`、`automake`、`libtool` 和 `pkg-config`。 2. 下载 glib-2.58.3 源码包并解压到指定目录。 3. 配置交叉编译环境变量,例如: ```bash export CC=arm-linux-gnueabihf-gcc export CXX=arm-linux-gnueabihf-g++ export AR=arm-linux-gnueabihf-ar export RANLIB=arm-linux-gnueabihf-ranlib export PKG_CONFIG_PATH=/path/to/target/lib/pkgconfig export PKG_CONFIG_LIBDIR=/path/to/target/lib/pkgconfig ``` #### 配置阶段 在解压后的 glib-2.58.3 目录中运行以下命令进行配置: ```bash ./configure --host=arm-linux-gnueabihf \ --prefix=/home/dell/personal/liuruipeng/lib/build/glib-2.58.3/install/arm \ --disable-shared \ --disable-tests \ --disable-fam \ --disable-man \ --disable-threads \ --with-pcre=system ``` 上述命令中的选项解释如下: - `--host=arm-linux-gnueabihf`:指定目标架构为 ARM。 - `--prefix`:设置安装路径。 - `--disable-shared`:禁用共享库生成。 - `--disable-tests`:禁用测试程序编译。 - `--disable-fam`:禁用文件访问监控支持。 - `--disable-man`:禁用手册页生成。 - `--disable-threads`:禁用多线程支持(根据需求可启用)。 - `--with-pcre=system`:使用系统提供的 PCRE 库[^1]。 #### 编译与安装 1. 运行 `make` 命令开始编译: ```bash make -j$(nproc) ``` 2. 安装编译好的文件到指定目录: ```bash make install ``` #### 移植到开发板 完成编译后,将生成的库文件复制到开发板的目标目录: ```bash cd /home/dell/personal/liuruipeng/lib/build/glib-2.58.3/install/arm/lib cp -a libglib-2.0* /nfs/roofts/lib rm /home/dell/personal/liuruipeng/lib/build/glib-2.58.3/install/arm/lib/libglib-2.0.la ``` #### 注意事项 1. **依赖项**:glib-2.58.3 可能需要额外的依赖库,例如 `pcre` 和 `gettext`。确保这些依赖已正确交叉编译[^3]。 2. **国际化问题**:如果遇到 `glibintl.h` 相关错误,可以尝试定义宏 `bind_textdomain_codeset` 的返回值为 `NULL` 或其他合适值[^3]。 3. **兼容性**:确保使用的工具链版本与目标平台匹配。 #### 示例代码 以下是一个简单的测试程序,用于验证交叉编译glib 库是否正常工作: ```c #include <glib.h> int main(int argc, char *argv[]) { GString *str = g_string_new("Hello, "); g_string_append(str, "GLib!"); g_print("%s\n", str->str); g_string_free(str, TRUE); return 0; } ``` 编译命令如下: ```bash arm-linux-gnueabihf-gcc -o test_glib test_glib.c \ -I/home/dell/personal/liuruipeng/lib/build/glib-2.58.3/install/arm/include/glib-2.0 \ -I/home/dell/personal/liuruipeng/lib/build/glib-2.58.3/install/arm/lib/glib-2.0/include \ -L/home/dell/personal/liuruipeng/lib/build/glib-2.58.3/install/arm/lib \ -lglib-2.0 ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值