重定位被截断以适合: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来完成,并且必须在所有目标文件上使用。但是,这可能会增加开销。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top