交叉编译时无法运行测试程序 - 交叉编译 Firebird

交叉编译时无法运行测试程序 - 交叉编译 Firebird

我尝试使用交叉编译器为arm linux编译firebird服务器(它被选择了 - 它工作正常)。

使用时:

./autogen.sh --host=arm-linux-gnu

我收到此错误:

检查 sem_init() 是否正常工作...配置:错误:在“/compile/code/firebird/trunk”中:配置:错误:交叉编译时无法运行测试程序

我知道我正在交叉编译,但也许 Firebird 开发人员不同意这一点(但我读过 Firebird 已准备好编译其他架构)。

答案1

配置通过编译和运行程序来确定某些问题的答案在飞行中...当构建主机与目标主机相同时,它(通常)可以执行此操作。

当您进行交叉编译时,(通常)您的构建机器无法运行交叉编译器生成的二进制文件。

为了克服这个问题,请在配置脚本中找到测试的位置,如果幸运的话,配置脚本将允许缓存测试结果...您可以使用它来欺骗配置脚本,让它认为它已经知道问题的答案,因此它不会尝试编译和运行二进制文件。

例如,如果您尝试交叉编译 openldap 2.3.11(我知道是旧版本),您可能需要在环境中传递变量ac_cv_func_memcmp_working=yes(或者我认为您可以在命令行上使用此设置调用配置,例如./configure ac_cv_func_memcmp_working=yes --prefix=...)。

配置脚本中的代码如下所示(它是旧版本的autoconf,因此代码在较新的配置脚本中会有所不同,但概念没有改变)...

echo $ECHO_N "checking for working memcmp... $ECHO_C" >&6
if test "${ac_cv_func_memcmp_working+set}" = set; then
  echo $ECHO_N "(cached) $ECHO_C" >&6
else
  if test "$cross_compiling" = yes; then
    ac_cv_func_memcmp_working=no
  else
...

您可以在上面的代码中看到,如果配置脚本认为您正在交叉编译,它会对目标机器做出(在我的情况下是错误的)假设。

如果您无法使用此技巧(缓存答案)解决它,您将不得不以其他方式提供解决方法...目标是欺骗配置脚本使其完全运行。

相关内容