Linux Mint の 64 ビット リポジトリの arm-linux-gnueabi-gcc を使用して、Nokia N9 電話用のプログラム (現在は libav の avconv) をクロス コンパイルしようとしています。コンパイラの libc バージョンは 2.15 で、電話には libc-2.10.1 があります。数学ライブラリには非互換性があり、libav から avconv プログラムをコンパイルして実行すると、segfault が発生します。
古いバージョンの libc に対してコンパイルおよびリンクする必要がありますが、--sysroot
オプションを機能させることができませんでした。
libav の構成とコンパイルを繰り返すのを避けるために、小さなテスト プログラムを作成しました。
arm-linux-gnueabi-gcc --sysroot=/opt/CrossCompilation/NokiaN9/ -o output.sysroot hello.c
arm-linux-gnueabi-gcc -o output.nosysroot hello.c
どちらのコマンドも同じ出力ファイルを作成します。これはhello.c
次のようになります。
#include <stdio.h>
#include <math.h>
int main() {
printf("Hello, World! Sin = %f\n", sin(0.6451));
}
最も奇妙な部分は、gcc が--sysroot
オプションを完全に無視することです。存在しないディレクトリを sysroot に渡すと、まったく同じ出力バイナリが生成されます。
arm-linux-gnueabi-gcc --sysroot=/foo/bar -o output.foobar hello.c
エラーについても文句を言いません。どうしたの?