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
よろしくお願いします。ありがとう!