1

考虑程序:

#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 更简单...)

4

1 回答 1

2

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

解决方案是移到-lgc最后:

gcc test.c -lgc

或添加:

gcc -Wl,--as-needed -lgc test.c
于 2012-10-06T01:01:26.590 回答