2

x86-64マシンでプログラムを正常にクロスコンパイルしました。ただし、ターゲットマシンsh4aで実行しようとすると、次のエラーが発生します。./ioq3ded.sh4a:/lib/libc.so.6:バージョン `GLIBC_2.11'が見つかりません(./ioq3ded.sh4aで必要) )。

2台のマシンの詳細は次のとおりです。コンパイルマシンアーキテクチャ:x86-64 LIBCバージョン:2.11

マシンアーキテクチャの実行:sh4a LIBCバージョン:2.5

プログラミング言語はCです

したがって、解決策として、sh4aマシンで2.11LIBCライブラリをコンパイルしようとしました。ただし、sh4aマシンのGCCコンパイラが古すぎたために失敗しました。権限がなく、GCCをアップグレードする可能性もありません。さらに、別の解決策として、クロスコンパイル時にリンクできるように、x86-64で2.5LIBCライブラリをコンパイルしようとしました。ただし、必要なオブジェクトが欠落しているため、。/configureは失敗しました。さらに、プログラムを静的コンパイルしようとしました。しかし、失敗しました:ioquake3に関しては、静的にビルドしようとしました:/bin/ld:/r/home7/usr/lib/libc.a(dl-tsd.o):TLSローカル実行コードを共有にリンクできませんオブジェクト私たちが持っている古いバージョンのgccで静的にビルドすることは不可能のようです。私はこの問題を調べました: https://bugs.gentoo.org/show_bug.cgi?id=122665

さらに、ネットからLIBC 2.5 for x86-64をダウンロードしました:http: //rpm.pbone.net/index.php3/stat/4/idpl/12884473/dir/startcom_5/com/glibc-2.5-34.x86_64 .rpm.html [^]

ただし、システムのもの(2.11バージョンライブラリ)ではなく、MY固有(2.5バージョンライブラリ)に対してリンクするように、コンパイルするための適切なフラグを見つけることができないようです。

ここに私の質問があります:*「make」フラグはどうあるべきですか?MY(2.5バージョンライブラリ)が存在するフォルダを考慮します:./glibc-2_5/lib64/libc.soそして、私のmakeは次のとおりです:make USE_LOCAL_HEADERS = 0 ARCH = sh4a CFLAGS ='-fopenmp -Wall -D_GNU_SOURCE = 1 -D_REENTRANT'USE_VOIP = 0 BUILD_CLIENT = 0 BUILD_MISSIONPACK = 0

4

1 に答える 1

3

ツールチェーンからSH4AマシンにGlibcファイルをコピーするだけです。

既存のlibcファイルを上書きしたくない場合は、を試してくださいchroot。それでもうまくいかない場合は、それらを別の場所に配置してから、リンクコマンドに次のオプションを追加してください。

-Wl,-rpath,/path/to/alternative/lib -Wl,-dynamic-linker,/path/to/alternative/lib/ld-linux.so

パスは、x86_64ビルドマシンではなく、SH4Aターゲットマシン上にある必要があります。

于 2012-12-04T10:57:31.343 に答える