2016-08-09 41 views
1

Ich bemerkte, dass std :: uncaught_exceptions Symbol aus dem Lager fehlt libC++ auf meinem Mac:Mac OSX libC++ fehlt std :: uncaught_exceptions Symbol

$ 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 

jedoch der Header erklärt den Prototyp:

$ 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; 

Ist das ein schlechter Build oder etwas? Von der libC++ Quelle sehe ich, dass das Symbol in libC++ enden sollte, aber es ist nicht da und ich bekomme ein fehlendes Symbol beim Linken.

Edit: hier ist ein minimales Versagen Programm:

$ 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

Die Frage ist, ob Sie tatsächlich mit 'C++ 17' kompilieren? in 'C++ 11' ist es immer noch das bool' std :: uncaught_exception() ', also versuchen Sie es stattdessen. –

+0

Die Kompilierung wurde mit '-std = C++ 1z' ​​durchgeführt. Das Problem liegt nicht in der Kompilierungsphase, in der der Prototyp von std :: uncaught_exceptions im Header der Ausnahme sichtbar ist, aber zum Zeitpunkt der Verknüpfung, wenn das Symbol in der Bibliothek fehlt. – Engineerist

+0

Vielleicht zeigen Sie, wie Sie es in Ihrem Code verwenden; Ich habe jedoch einen Verdacht, dass es ein Fehler sein könnte. Wenn Sie den Ausnahme-Header aus dem llvm-Trunk mit der OS X-Version vergleichen, gibt es keine '#ifndef _LIBCPP_NO_EXCEPTIONS' Deklaration sowie' uncaught_exception_count() '... Es ist unklar, ob das etwas damit zu tun hat. Ich kann Code mit den 'C++ 1z' ​​und' uncaught_exceptions' kompilieren, obwohl wenn ich versuche, die Methode aufzurufen, bekomme ich den gleichen Fehler wie du. –

Antwort

1

es eine Weile (paar Jahre) war da Apple es als wichtig genug libC++ zu aktualisieren dylib.. Ich höre Gerüchte es könnte in der OS nach El Capitan aktualisiert werden.

Was ist los mit Swift?! ;-)

+1

Ich wusste das nicht. Ich nehme es dann als Defekt. – Engineerist

+1

Es ist immer noch nicht aktualisiert. 'dyld: Symbol nicht gefunden: __ZdlPvSt11align_val_t Referenziert von: /usr/local/Cellar/verilator/3.912/bin/verilator_bin Erwartet in:/usr/lib/libC++ 1.dylib' – Barry

+0

@Barry Ich habe gerade die Minimalwerte des OP überprüft Programm in Sierra, 10.12.6 und es bestanden. Auf welchem ​​Betriebssystem testen Sie? Ich werde diese Antwort mit den neuesten Informationen aktualisieren. –