考虑一下这个程序:
#include <gc/gc.h>
int main() {
void* p = GC_MALLOC(15);
}在Ubuntu10.04LTS下编译(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更简单的事情...)
发布于 2012-10-06 09:01:27
回答我自己的问题:实际上,Boehm库的工作方式仍然与12.04中相同。问题是,GCC不知道!GCC开始默认--as-needed,如果在行首则完全丢弃-lgc。这是一个非常重大的变化!!
解决方案是将-lgc移到末尾:
gcc test.c -lgc或添加:
gcc -Wl,--as-needed -lgc test.chttps://stackoverflow.com/questions/12734161
复制相似问题