gcc 为什么ARM的交叉编译在./configure中失败?

falq053o  于 2023-03-02  发布在  其他
关注(0)|答案(3)|浏览(222)

我知道这个问题很模糊,但我不知道该怎么表达我现在所面对的:我试图从sources交叉编译Prolog的一个实现(特别是SWI-Prolog)。他们使用GNU-Autoconf工具(我是一个完全的初学者)来构建源代码,所以我想我可以设置--host--build三元组以允许ARM交叉编译,但它没有工作。这是我发出的命令:

$ ./configure --build=i686-pc-linux-gnu --host=arm-linux-gnueabi

(... lots of checks ...)

checking for clock_gettime in -lrt... yes
checking for clock_gettime... yes
checking for pthread support for cpu clocks... configure: error: in `(...)/pl-6.6.5/src':
configure: error: cannot run test program while cross compiling
See `config.log' for more details

(The粘贴完整输出(here
我已经检查了config.log file,但是我不知道到底缺少了什么,我知道在这个阶段,可能有几个库丢失或错误,但是我不知道从哪里开始。

tf7tbtn2

tf7tbtn21#

configure的输出为:

checking for pthread support for cpu clocks... configure: error: in `(...)/pl-6.6.5/src':
configure: error: cannot run test program while cross compiling

这可能意味着在configure.ac中的某个地方有一个对宏AC_TRY_RUN或类似的东西的调用。这个宏基本上编译并执行一个可执行文件,试图找出更多的细节。调用这个宏在交叉编译时不起作用,因为 buildhost 架构不同。从你粘贴的内容中,似乎还有另一个不会导致configure失败的方法:

checking whether mutex support recursive locking... ./configure: line 7307: ./conftest: cannot execute binary file

IMHO软件包维护者应该被告知他们的软件包不会交叉编译(除非他们在README或其他文档中特别说明不会交叉编译)。
为了让它能够交叉编译,你必须找出适合你平台的AC_TRY_RUN测试的“正确”答案,并找到一种方法将它们集成到configure.ac中,本质上就是修补configure.ac
如果Scratchbox2适用于您的设备,我想您也可以使用它。

vjrehmav

vjrehmav2#

我试着把配置文件中的“cross-compile”选项设置为yes。解释你是否在交叉编译的评估逻辑是不可靠的。它在maybe和yes之间保持平衡。一旦到达maybe阶段就中止编译。

#
# Initializations.
#
ac_default_prefix=/usr/local
ac_config_libobj_dir=.
cross_compiling=**yes**
subdirs=
MFLAGS=
MAKEFLAGS=
SHELL=${CONFIG_SHELL-/bin/sh}

我在配置. /usr/local/之前为工具链获取了环境设置脚本
这将填充CC和CXX以及其他环境变量。然后尝试使用以下选项进行配置。
./配置--主机=x86_64 --目标= armv 7a--内部版本=armv7 --前缀=/home/kamal/dmalloc-5.5.2/bld CXXFLAGS=-fPIC CXXFLAGS =-fPIC --启用线程--禁用shlib--启用cxx
注意:我必须在strdup声明之上的dmalloc. h中undef strdup,即

#undef strdup

希望这个有用。

cnjp1d6j

cnjp1d6j3#

请尝试使用要交叉编译的较新版本的程序包。

相关问题