如何在交叉編譯 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)。

相關內容