如何在交叉编译 glib 时禁用测试程序

如何在交叉编译 glib 时禁用测试程序

当尝试使用以下配置参数交叉编译 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)。

然后运行configureCONFIG_SITE指向您刚刚创建的站点默认文件的完整路径:

CONFIG_SITE=/path/to/config.arm-hisiv400-linux ./configure --prefix=$HOME --host=arm-hisiv400-linux

configure应使用站点默认文件中的值,跳过堆栈测试。它可能会在下一个需要运行为目标编译的程序的测试中失败,但您可以以相同的方式修复该问题,向站点默认文件添加更多条目(只要configure.ac使用AC_CACHE_VALaround AC_TRY_RUN)。

相关内容