2016-08-09 3 views
1

が不足している私がのstd :: uncaught_exceptionsシンボルが私のMac上の在庫のlibC++から欠落していることに気づいた:マックOSXのlibC++がのstd :: uncaught_exceptionsシンボル

$ clang++ -v; otool -L /usr/lib/libc++.dylib 
Apple LLVM version 7.3.0 (clang-703.0.31) 
Target: x86_64-apple-darwin15.6.0 
Thread model: posix 
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin 
/usr/lib/libc++.dylib: 
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.1.0) 
    /usr/lib/libc++abi.dylib (compatibility version 1.0.0, current version 125.0.0) 
... 
$ nm /usr/lib/libc++.dylib | c++filt | grep uncaught 
0000000000007782 T std::uncaught_exception() 
       U ___cxa_uncaught_exception 

しかし、ヘッダはプロトタイプを宣言しています

$ pwd 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1 
$ grep uncaught_exceptions exception 
int uncaught_exceptions() noexcept; // C++17 
_LIBCPP_FUNC_VIS int uncaught_exceptions() _NOEXCEPT; 

これは悪い構成ですか? libC++ソースからは、シンボルがlibC++になるはずですが、そこにはないので、リンクするときにシンボルが欠落してしまいます。

編集:Appleはそれが十分に重要なのlibC++ dylibを更新するために考えられているのでそれはしばらく(数年)となっている

$ cat t.cpp; clang++ -std=c++1z t.cpp 
#include <exception> 

int main() { 
    return std::uncaught_exceptions(); 
} 
Undefined symbols for architecture x86_64: 
    "std::uncaught_exceptions()", referenced from: 
     _main in t-a4015f.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
+0

実際には 'C++ 17'でコンパイルしていますか? 'C++ 11'ではまだbool' std :: uncaught_exception() 'なので、代わりにそれを使ってみてください。 –

+0

'-std = C++ 1z'でコンパイルしました。この問題は、std :: uncaught_exceptionsのプロトタイプが例外ヘッダーに表示されるコンパイル段階ではなく、シンボルがライブラリから欠落しているリンク時に発生します。 – Engineerist

+0

コード内でどのように使用しているかを表示することがあります。私はバグかもしれないが、疑いがある。 llvmトランクからの例外ヘッダをOS Xバージョンと比較すると、 '#ifndef _LIBCPP_NO_EXCEPTIONS'宣言と' uncaught_exception_count() '宣言はありません。これと関係があるかどうかは不明です。私は 'C++ 1z'と' uncaught_exceptions'でコードをコンパイルすることができますが、メソッドを呼び出すと同じエラーが出ます。 –

答えて

1

:ここでは、最小限の失敗したプログラムです。噂が聞こえますの後にエルキャピタンに更新される可能性があります。

何が問題なのですかスイフト?! ;-)

+1

私はそれを知らなかった。私はそれを欠点として受け止めます。 – Engineerist

+1

まだ更新されていません。 'dyld:シンボルが見つかりません:__ZdlPvSt11align_val_t 参照先:/usr/local/Cellar/verilator/3.912/bin/verilator_bin /usr/lib/libC++になるはずです:1.dylib' – Barry

+0

@Barry私はOPの最小値を確認しましたSierra、10.12.6で失敗したプログラムと合格しました。どのOSでテストしていますか?この回答を最新情報で更新します。 –

関連する問題