1. ホーム
  2. c

[解決済み] このGCCエラー「...relocation truncated to fit...」は何を意味するのでしょうか?

2022-01-30 13:12:29

質問

ホスト・アクセラレータ・システムのホスト側をプログラミングしています。ホストはPC上のUbuntu Linuxで動作し、USB接続で組込みハードウェアと通信します。通信は、組込みハードウェアのメモリとの間でメモリチャンクをコピーすることによって行われます。

ボードのメモリ上には、データを書き込んだり読み込んだりするメールボックスとして使うメモリ領域があります。メールボックスは構造体として定義されており、同じ定義を使ってホスト空間にミラーメールボックスを割り当てています。

このテクニックは過去にうまく使ったので、今度はホストのEclipseプロジェクトを現在のプロジェクトのワークスペースにコピーし、適切な名前に変更した。不思議なのは、ホスト・プロジェクトをビルドするときに、次のようなメッセージが表示されることです。

ターゲットの構築: fft2d_host
起動します。GCC Cリンカー
gcc -L/opt/adapteva/esdk/tools/host/x86_64/lib -o "fft2d_host" ./src/fft2d_host.o -le_host -lrt

./src/fft2d_host.o: 関数 `main' の中です。

fft2d_host.c:(.text+0x280): リロケーションは適合するように切り詰められました。./src/fft2d_host.o の COMMON セクションで定義されているシンボル `Mailbox' に対して R_X86_64_PC32 を使用します。

このエラーの意味と、古いプロジェクトではOKなのに、現在のプロジェクトではビルドできない理由は何ですか?

解決方法は?

相対アドレス方式のターゲットが、選択した相対アドレス方式の32ビット変位でサポートされるよりも遠くにあるような方法でプロジェクトをリンクしようとしている場合。 これは、現在のプロジェクトが大きいか、オブジェクトファイルを異なる順序でリンクしているか、または不必要に拡張されたマッピングスキームがあることが原因である可能性があります。

この質問は、エラーメッセージの一般的な部分をウェブで検索すると生産的であることを示す完璧な例です。

http://www.technovelty.org/code/c/relocation-truncated.html

治療法を提案するものです。