当尝试使用以下配置参数交叉编译 glib 时,出现以下错误:
./configure --prefix=$HOME --host=arm-hisiv400-linux
checking for growing stack pointer... configure: error: in `/home/aa/Hi3536_SDK_V2.0.4.0/glib-2.50.0':
configure: error: cannot run test program while cross compiling
See `config.log' for more details
有没有办法禁用这些测试,以便我的交叉编译过程可以通过?
答案1
这种情况下的标准做法是使用Autoconf 站点默认文件包含要运行的测试的适当值configure
。
在这种特殊情况下,configure
正在尝试确定堆栈的增长方向:
volatile int *a = 0, *b = 0;
void f (int i) { volatile int x = 5; if (i == 0) b = &x; else f (i - 1); }
int main () { volatile int y = 7; a = &y; f (100); return b > a ? 0 : 1; }
因此,您需要交叉编译该代码,在目标平台上运行它,并检查其退出代码 ( echo $?
)。例如config.arm-hisiv400-linux
,为您的目标架构创建一个站点默认文件,并添加一行
glib_cv_stack_grows=yes
(如果上面的退出代码为 0),或者
glib_cv_stack_grows=no
(如果退出代码为 1)。
然后运行configure
并CONFIG_SITE
指向您刚刚创建的站点默认文件的完整路径:
CONFIG_SITE=/path/to/config.arm-hisiv400-linux ./configure --prefix=$HOME --host=arm-hisiv400-linux
configure
应使用站点默认文件中的值,跳过堆栈测试。它可能会在下一个需要运行为目标编译的程序的测试中失败,但您可以以相同的方式修复该问题,向站点默认文件添加更多条目(只要configure.ac
使用AC_CACHE_VAL
around AC_TRY_RUN
)。