我知道这个问题很模糊,但我不知道该怎么表达我现在所面对的:我试图从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,但是我不知道到底缺少了什么,我知道在这个阶段,可能有几个库丢失或错误,但是我不知道从哪里开始。
3条答案
按热度按时间tf7tbtn21#
configure
的输出为:这可能意味着在
configure.ac
中的某个地方有一个对宏AC_TRY_RUN
或类似的东西的调用。这个宏基本上编译并执行一个可执行文件,试图找出更多的细节。调用这个宏在交叉编译时不起作用,因为 build 和 host 架构不同。从你粘贴的内容中,似乎还有另一个不会导致configure
失败的方法:IMHO软件包维护者应该被告知他们的软件包不会交叉编译(除非他们在
README
或其他文档中特别说明不会交叉编译)。为了让它能够交叉编译,你必须找出适合你平台的
AC_TRY_RUN
测试的“正确”答案,并找到一种方法将它们集成到configure.ac
中,本质上就是修补configure.ac
。如果Scratchbox2适用于您的设备,我想您也可以使用它。
vjrehmav2#
我试着把配置文件中的“cross-compile”选项设置为yes。解释你是否在交叉编译的评估逻辑是不可靠的。它在maybe和yes之间保持平衡。一旦到达maybe阶段就中止编译。
我在配置. /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,即
希望这个有用。
cnjp1d6j3#
请尝试使用要交叉编译的较新版本的程序包。