【问题标题】:Cross Compile zlib for ARM为 ARM 交叉编译 zlib
【发布时间】:2019-05-21 22:55:00
【问题描述】:

我尝试为 arm-poky-linux-gnueabi 交叉编译 zlib,但在启动 make 时出现错误:

...:~/zlib-1.2.11$ AR=$HOST-ar CC=$HOST-gcc RANLIB=$HOST-ranlib ./configure --prefix=$HOME/zlibARM 
Checking for shared library support... 
Building shared library libz.so.1.2.11 with arm-poky-linux-gnueabi-gcc. 
Checking for size_t... Yes. 
Checking for off64_t... Yes. 
Checking for fseeko... Yes. 
Checking for strerror... Yes. 
Checking for unistd.h... Yes. 
Checking for stdarg.h... Yes. 
Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf(). 
Checking for vsnprintf() in stdio.h... Yes. 
Checking for return value of vsnprintf()... Yes. 
Checking for attribute(visibility) support... Yes.

...:~/zlib-1.2.11$ make
arm-poky-linux-gnueabi-gcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -I. -c -o example.o test/example.c
make: execvp: arm-poky-linux-gnueabi-gcc : Trop de niveaux de liens symboliques
Makefile:147: recipe for target 'example.o' failed
make: *** [example.o] Error 127

你能帮帮我吗?

【问题讨论】:

  • 执行时会发生什么:arm-poky-linux-gnueabi-gcc --version?

标签: gcc makefile compiler-errors arm zlib


【解决方案1】:

我知道这篇文章已经发布了 7 个月,但我能够成功地交叉编译 zlib for ARM(在 MacOS 上),使用以下配置命令:

CHOST=arm \
CC=<PATH_TO_CROSS_GCC> \
AR=<PATH_TO_CROSS_AR> \
RANLIB=<PATH_TO_CROSS_RANLIB> \
./configure \
--prefix=<INSTALL_PATH>

其中PATH_TO_CROSS_GCCPATH_TO_CROSS_ARPATH_TO_CROSS_GCC 指向交叉编译工具(在我的例子中,我使用crosstool-NG)。

最终使它对我有用的是指定CHOST=arm,这导致它实际使用指定的ar

希望这可以帮助某人。

【讨论】:

  • 只要指定CHOST=&lt;target&gt;就足够了,CCAR等会自动配置&lt;target&gt;-前缀,JFYI。