Configure通过动态编译和运行程序来确定某些问题的答案……当构建主机与目标主机相同时,它可以(通常)执行此操作。
当您进行交叉编译时,(通常)您的构建计算机无法运行由交叉编译器生成的二进制文件。
为了克服这个问题,请在配置脚本中找到测试所在的位置,如果幸运的话,配置脚本将允许缓存测试结果...您可以使用它来欺骗配置脚本以使其认为已经存在知道问题的答案,因此它将不会尝试编译和运行二进制文件。
For example, if you were trying to cross-compile openldap 2.3.11 (an old version, I know), you may need to pass in the environment the variable ac_cv_func_memcmp_working=yes (or I think you can call configure with this setting on the command line e.g. ./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
...
您可以在上面的代码中看到,如果配置脚本认为您正在交叉编译,则它会对目标计算机做出一个(对于我而言是不正确的)假设。
如果您不能使用此技巧(已缓存的答案)解决该问题,则必须以其他方式提供一种解决方法……目标是使configure脚本完全运行。