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 の場合)。

次に、作成したサイトのデフォルト ファイルの完全なパスを指定しconfigureて実行します。CONFIG_SITE

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

configureは、サイトのデフォルト ファイルの値を使用し、スタックのテストをスキップする必要があります。ターゲット用にコンパイルされたプログラムを実行する必要がある次のテストではおそらく失敗しますが、サイトのデフォルト ファイルにエントリを追加することで、同じ方法で修正できます ( が の前後を使用configure.acしている限り)。AC_CACHE_VALAC_TRY_RUN

関連情報