1

libiberty.a から cplus_demangle() 関数を呼び出そうとしていますが、「'cplus_demangle' への未定義参照」エラーが発生します。

これは私の単純なメインです:

extern "C" char *cplus_demangle(const char *, int);

int main() {
  cplus_demangle("a", 0);
}

および私のビルド コマンド (libiberty は ../../install/lib64 にあります):

g++ -L../../install/lib64 -liberty main.cpp -o main

libiberty.a の名前を別の名前に変更すると、「-liberty が見つかりません」というエラーが発生します。したがって、リンカーはライブラリを認識していると思います。そして、libiberty.a で cplus_demangle を確認できます。

$> nm -C --defined-only libiberty.a | grep "cplus_demangle"
0000000000002230 T cplus_demangle
...

しかし、コンパイル時に次のエラーが発生します。

main.cpp:(.text+0xf): undefined reference to `cplus_demangle'
collect2: ld returned 1 exit status
make: *** [main] Error 1

よろしくお願いします。ありがとう!

4

1 に答える 1

4

-liberty をコマンド ラインの末尾に移動します。ライブラリは、main.o の作成後に検索する必要があります。順序が重要です。

于 2012-04-22T15:23:26.853 に答える