【问题标题】:64 Bit Error?64 位错误?
【发布时间】:2010-10-23 19:23:04
【问题描述】:

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

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

提前致谢。

【问题讨论】:

    标签: c++ linux time.h


    【解决方案1】:

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

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

    【讨论】:

    • 这是一个很好的观点,可能是我以后会遇到的错误。我已经修复了这个问题(尽管错误仍然存​​在),它是静态的原因仅仅是因为我将它从 MPI 应用程序移植到线程应用程序。
    • 你,我的朋友,是个芭蕾舞者。
    猜你喜欢
    • 2015-12-08
    • 2016-05-10
    • 1970-01-01
    • 2019-03-18
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 2014-01-12
    相关资源
    最近更新 更多