次の設定パラメータを使用して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
スタックテストをスキップしてサイトの基本ファイルの値を使用する必要があります。ターゲットに対してコンパイルされたプログラムを実行する必要がある次のテストでは失敗する可能性がありますが、同じ方法でサイトの基本ファイルに追加のエントリを追加することで問題を解決できます(aroundを使用configure.ac
)。AC_CACHE_VAL
AC_TRY_RUN