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 に答える