2

binutils-2.24 のGold リンカーを使用して、ターゲットのアプリケーションをリンクしています: i686-pc-linux-gnu 。

i686-pc-linux-gnu マシンで Gold を実行したときに仮想メモリ不足エラーが発生したため、(より多くの仮想メモリを取得するために) x86_64-linux-gnu ホストでビルドし、このマシンも同様ですが、ターゲットのアプリケーションをリンクするために使用しています: i686-pc-linux-gnu.

最初のリンクは成功しました - 私はまだ実行可能ファイルを持っていません - そのため、Gold は --incremental-full に戻り、i686-pc-linux-gnu マシンで正常に実行できる動作中の実行可能ファイルを取得します。

gold-ld -o stam32 -dynamic-linker /lib/ld-linux.so.2 -L/usr/lib32 /usr/lib32/crti.o /usr/lib32/crtn.o /usr/lib32/crt1.o main.o try.o -lc --incremental

* stam32: stat: --incremental-full でリンクしているようなファイルまたはディレクトリはありません*

2 番目のリンクは、次のエラーで失敗します。

../objs-binutils-2.24/gold/ld -o stam32 -dynamic-linker /lib/ld-linux.so.2 -L/usr/lib32 /usr/lib32/crti.o /usr/lib32/crtn. o /usr/lib32/crt1.o main.o try.o -lc --incremental

../objs-binutils-2.24/gold/ld: init_got_plt_for_update の内部エラー、../../binutils-2.24/gold/target.h:949

ソースコードを調べたところ、「init_got_plt_for_update」は x86_64 と tilegx のみに実装されていることがわかりました。他のターゲットの場合、init_got_plt_for_update は単純に gold_unreachable() を呼び出し、gold をエラーで終了します。

一方、Gold のインクリメンタル リンク ( https://video.linux.com/videos/incremental-linking-with-gold ) に関する講義全体があり、Gold がサポートするターゲットとして i386 が具体的に言及されています。 i386 ターゲットでの --incremental フラグの使用に関する制限については言及していません (私が知る限り、i686-pc-linux-gnu は i386 ターゲットです)。

インクリメンタルリンクが失敗する理由を知っている人はいますか?

前もって感謝します、ガリット・ケレット

4

1 に答える 1