Перемещение усечено, чтобы соответствовать ошибке при компиляции с использованием g ++ - PullRequest
3 голосов
/ 20 мая 2011

Я пытаюсь скомпилировать кусок кода cpp под Linux, и получил следующую ошибку:

/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

Моя ОС: Ubuntu 10.10
g ++: версия gcc 4.4.5 (Ubuntu / Linaro 4.4.4-14ubuntu5)
Кто-нибудь сталкивался с этой ошибкой раньше? Спасибо.

чэн

1 Ответ

1 голос
/ 12 ноября 2012

Просто дополняя приведенные выше ответы:

По умолчанию программа генерируется в модели малого кода , что в основном означает, что ее символы должны быть связаны в нижних 2 ГБ адресного пространства,

Если они не подходят, решением может быть использование модели среднего кода , что означает, что программные и маленькие символы связаны в нижних 2 ГБ адресного пространства, а большие символыположить в большие разделы данных или bss, расположенные выше 2BG (аннотация от man gcc ).Большие символы определяются с использованием -mlarge-data-threshold , поэтому можно провести некоторую оптимизацию, но учтите, что это значение должно быть одинаковым для всех объектов.

g++ -mcmodel=medium ....
...