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

时间:2014-05-27 11:20:00

标签: gcc arm cross-compiling autoconf swi-prolog

我知道这个问题很模糊,但我不知道如何表达我在这里面临的问题:我正试图从{{3'交叉编译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

(完整输出被粘贴sources

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

2 个答案:

答案 0 :(得分: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

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

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

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

为了让它进行交叉编译,你必须找出适用于你的平台的AC_TRY_RUN测试的“正确”答案,并找到一种方法将它们集成到configure.ac中,基本上修补{ {1}}。软件包维护者也可以协助完成此任务。

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

答案 1 :(得分:1)

我尝试将配置文件中的“交叉编译”选项设置为“是”。 解释您是否进行交叉编译的评估逻辑很不稳定。它在也许与是之间保持平衡。 进入阶段后立即中止编译。

#
# 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以及其他环境变量。 然后尝试使用以下选项进行配置。

./ configure --host = x86_64 --target = armv7a --build = armv7 --prefix = / home / kamal / dmalloc-5.5.2 / bld CXXFLAGS = -fPIC CFLAGS = -fPIC-启用线程--disable-shlib --enable-cxx

注意:我必须在strmup声明上在dmalloc.h中取消对strdup的定义,即

#undef strdup

希望这会有所帮助。