2

重定位被截断以适应: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);
 }

告诉我为什么这是错误的?

提前致谢。

4

1 回答 1

6

不知道为什么会发生链接器错误,但是是否有任何特殊原因使 struct timeval 静态?使其本地化同样快,并使您的函数线程安全,同时节省堆(嗯,bss)空间。

编辑:这是问题所在。您的静态堆空间已超过 2GB。进行一些动态分配,或更改内存模型。在 gcc 中,这可以通过传递 -mcmodel=medium 来完成,并且必须用于所有目标文件。然而,这可能会增加一些开销。

于 2009-05-05T02:20:43.797 回答