我知道这个问题很模糊,但我不知道如何表达我在这里面临的问题:我正试图从{{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,但我无法理解究竟缺少什么。我知道在这个阶段,可能会有几个缺少库或错误,但我无法理解从哪里开始。
答案 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
希望这会有所帮助。