重定位被截断以适合: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);
}
告诉我为什么这是错的?
提前致谢。
答案 0 :(得分:6)
不确定链接器错误发生的原因,但是有没有什么特别的理由让struct timeval变为静态?使它本地化同样快,并使您的函数线程安全,同时保留堆(井,bss)空间。
编辑:这是问题所在。静态堆空间中超过了2GB。制作一些动态分配或更改内存模型。在gcc中,这可以通过传递-mcmodel = medium来完成,并且必须在所有目标文件上使用。但是,这可能会增加开销。