【问题标题】:How to use Boehm Garbage collector in Ubuntu 12.04如何在 Ubuntu 12.04 中使用 Boehm 垃圾收集器
【发布时间】:2012-10-04 19:08:25
【问题描述】:

考虑程序:

#include <gc/gc.h>
int main() {
  void* p = GC_MALLOC(15);
}

在 Ubuntu 10.04 LTS 下编译 (gcc -lgc test.c)。在 12.04 LTS 下:

/tmp/cc7GcTfU.o: In function `main':
main.c:(.text+0xe): undefined reference to `GC_malloc'
collect2: ld returned 1 exit status

看起来在 10.04 和 12.04 之间,他们更改了库而不是在 malloc 替换中编译。或者这就是我认为libgc1c2 包的描述所说的:

[...] However, it does not work as a drop-in malloc(3) replacement.

有没有一种简单的方法来解决这个问题? (比如说,比手动重新编译 libgc 更简单...)

【问题讨论】:

    标签: ubuntu ubuntu-12.04 ubuntu-10.04 boehm-gc


    【解决方案1】:

    回答我自己的问题:实际上,Boehm GC 库的工作方式仍与 12.04 中的相同。问题是GCC没有! GCC 已开始默认为--as-needed,如果-lgc 位于行首,则将其完全删除。这是一个非常重大的变化!

    解决方法是将-lgc移到最后:

    gcc test.c -lgc
    

    或添加:

    gcc -Wl,--as-needed -lgc test.c
    

    【讨论】:

    • 链接器命令行中库的顺序一直很重要。当库是档案(.a 文件)时,它会在看到库时链接库中的代码。如果库在 .o 文件之前,那么它将从库中看到不需要任何内容​​。
    • 这取决于编译器。 GCC 过去默认链接所有内容。现在它默认为--as-needed
    猜你喜欢
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    相关资源
    最近更新 更多