重定位被截断以适合:R_X86_64_PC32 针对“.bss”
编译时,我在 g++ 中遇到此链接器错误:
其余的代码并不重要,因为这个定义破坏了我的编译。时间函数位于 sys/time.h 中。在 64 位 RHEL 上编译。
long ntime() {
struct timeval tp;
gettimeofday(&tp, (struct timezone *)0);
return (tp.tv_sec*1000 + tp.tv_usec / 1000);
}
告诉我为什么这是错误的?
提前致谢。
最佳答案
不确定为什么会发生链接器错误,但是是否有任何特殊原因使 struct timeval 成为静态?将其设置为本地同样快,并使您的函数线程安全,同时节省堆(好吧,bss)空间。
编辑:这就是问题所在。您的静态堆空间已超过 2GB。进行一些动态分配,或者更改内存模型。在 gcc 中,这可以通过传递 -mcmodel=medium 来完成,并且必须在所有目标文件上使用。然而,这可能会增加一些开销。
关于c++ - 64 位错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/823015/