3

Linux で cpp コードをコンパイルしようとしましたが、次のエラーが発生しました。

/tmp/ccIeh7Ta.o: In function `model::MulPLSA::EStep()':
mul_plsa.cpp:(.text+0xb12): relocation truncated to fit: R_X86_64_32S against symbol `model::MulPLSA::mItemLatRatDeno' defined in .bss section in /tmp/ccIeh7Ta.o
mul_plsa.cpp:(.text+0xb42): relocation truncated to fit: R_X86_64_32S against symbol `model::MulPLSA::mItemLatRatDeno' defined in .bss section in /tmp/ccIeh7Ta.o
/tmp/ccIeh7Ta.o: In function `model::MulPLSA::MStep()':
mul_plsa.cpp:(.text+0xcec): relocation truncated to fit: R_X86_64_32S against symbol `model::MulPLSA::mItemLatRatDeno' defined in .bss section in /tmp/ccIeh7Ta.o
collect2: ld returned 1 exit status

私の OS: Ubuntu 10.10
g++: gcc バージョン 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5)
以前にこのエラーに遭遇したことがありますか? ありがとう。

チェン

4

1 に答える 1

1

デフォルトでは、プログラムは小さなコード モデルで生成されます。これは基本的に、そのシンボルをアドレス空間の下位 2 GB にリンクする必要があることを意味します。

それらが適合しない場合、解決策は中程度のコード モデルを使用することです。これは、プログラムと小さなシンボルがアドレス空間の下位 2GB にリンクされ、大きなシンボルが 2BG より上にある大きなデータまたは bss セクションに配置されることを意味します (要約man gccから)。大きなシンボルは-mlarge-data-thresholdを使用して定義されるため、最適化を行うことができますが、この値はすべてのオブジェクトで同じにする必要があることに注意してください。

g++ -mcmodel=medium ....
于 2012-11-12T15:42:45.197 に答える