web-dev-qa-db-ja.com

Libc ++未定義参照を使用したClangでのコンパイル

最初のカップルは参照するには長すぎます。 SVNからclangとlibc ++を使用してclang++ -stdlib=libc++ ../main.cc ...をコンパイルしようとすると、このエラーが発生します。

error: undefined reference to 'typeinfo for char const*'
error: undefined reference to '__cxa_allocate_exception'
error: undefined reference to '__cxa_throw'
/tmp/cc-pbn00y.o:../main.cc:function std::__1::deque<double, std::__1::allocator<double> >::__add_back_capacity(): error: undefined reference to '__cxa_begin_catch'
/tmp/cc-pbn00y.o:../main.cc:function std::__1::deque<double, std::__1::allocator<double> >::__add_back_capacity(): error: undefined reference to '__cxa_rethrow'
/tmp/cc-pbn00y.o:../main.cc:function std::__1::deque<double, std::__1::allocator<double> >::__add_back_capacity(): error: undefined reference to '__cxa_end_catch'
/tmp/cc-pbn00y.o(.eh_frame+0xbd3): error: undefined reference to '__gxx_personality_v0'

解決策:答えの1つに感謝します。解決策を知っています。 libc ++をlibstdc ++のように単独で使用することはできません。libc ++ abiとリンクする必要があります。ただし、libc ++ abiはまだ完全ではないため、現時点ではlibc ++の使用は少し不完全なようですが、それが完了したときの私の最初の選択肢です。

PDATE 5/26/2012: libc ++ abiがC++用に完成し、次のようにclang ++を正常に使用していますclang++ -std=c++11 -stdlib=libc++ -lc++abi

28
norcalli

Libc ++はまだすべての例外関数をサポートしていないと思います。ステータスページをご覧ください。

http://libcxxabi.llvm.org/spec.html

あなたはおそらくgnuのlibstdc ++に対してリンクすることができます

16
Arvid

Clangとlibc ++用のUbuntu Vividパッケージを使用すると、次のようになります。

clang++ -std=c++11 -stdlib=libc++ <object files> -lc++abi -lsupc++

オブジェクトファイルが-lフラグの前に来ることが重要です。例外を使用するとき。 libstdc ++に対してコンパイルされたライブラリーを使用し、それらのインターフェースでSTLタイプを使用する場合、これはまだリンクしません。

4
Vir

これは例外処理を使用しているようですが、コンパイラで有効になっていません。コマンドラインに-fexceptionsを渡してみてください。

2
Tobias Schlegel