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

我知道这个问题很模糊,但我不知道如何表达我在这里面临的问题:我正在尝试从 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

(完整输出粘贴here)

我已经检查了config.log file,但我无法理解究竟缺少什么.我知道在这个阶段,可能会有几个缺少库或错误​​,但我无法理解从哪里开始.

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或类似的东西.这个宏基本上编译可执行文件并执行它,试图找出更多细节.由于构建和主机架构不同,因此在交叉编译时调用此宏将不起作用.从您的粘贴,似乎有另一个不会导致配置失败:

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

应通知IMHO软件包维护人员他们的软件包不会交叉编译(除非他们明确说明它不会在README或其他文档中).

为了使它能够交叉编译,你必须弄清楚你的平台的AC_TRY_RUN测试的“正确”答案,并找到一种方法将它们集成到configure.ac中,基本上修补configure.ac.软件包维护者也可以协助完成此任务.

我想你也可以使用类似Scratchbox2的东西,如果它可用于你的设备.

相关文章
相关标签/搜索