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

Car*_*guz 4 autoconf gcc arm cross-compiling swi-prolog

我知道这个问题很模糊,但我不知道如何表达我在这里面临的问题:我正试图从源代码中交叉编译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
Run Code Online (Sandbox Code Playgroud)

(完整的输出粘贴在这里)

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

lda*_*v1s 6

输出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
Run Code Online (Sandbox Code Playgroud)

这可能意味着在某个地方configure.ac调用宏AC_TRY_RUN或类似的东西.这个宏基本上编译可执行文件并执行它,试图找出更多细节.由于构建主机架构不同,因此在交叉编译时调用此宏将不起作用.从您的粘贴,似乎有另一个不会导致configure失败:

checking whether mutex support recursive locking... ./configure: line 7307: ./conftest: cannot execute binary file
Run Code Online (Sandbox Code Playgroud)

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

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

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