我试图在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
我的操作系统:Ubuntu 10.10
g ++:gcc版本4.4.5(Ubuntu / Linaro 4.4.4-14ubuntu5)
有人之前遇到过这个错误吗?感谢。
成
答案 0 :(得分:1)
只是补充以上答案:
默认情况下,程序是在小代码模型中生成的,这基本上意味着它的符号必须在地址空间的低2 GB内链接。
如果它们不合适,解决方案可以是使用中型代码模型,这意味着程序和小符号链接在地址空间的低2GB中,并且大符号被放入位于2BG上方的大数据或bss部分(摘自man gcc)。 使用 -mlarge-data-threshold 定义大符号,因此可以进行一些优化,但请注意,此值应该与所有对象相同。
g++ -mcmodel=medium ....