考虑该计划:
#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更简单......)
答案 0 :(得分:1)
回答我自己的问题:实际上,Boehm GC库的工作方式与12.04中的相同。问题是海湾合作委员会没有! GCC已经开始默认为--as-needed
,如果它位于该行的开头,它将完全删除-lgc
。这是一个非常重大的变化!!
解决方案是将-lgc
移至最后:
gcc test.c -lgc
或添加:
gcc -Wl,--as-needed -lgc test.c