2015-03-28 4 views
5

Ich versuche, meine Projekte auf Arch Linux x64libC++, libC++ abi und Klirren ++ 3.6 verwenden zu kompilieren. 0.undefiniert Bezug auf `__cxa_thread_atexit @@ CXXABI`, wenn sie mit` libC++ `auf Linux kompilieren

Die Projekte kompilieren richtig, aber nicht mit dem folgenden Fehler verknüpfen:

error: CMakeFiles/main.cpp.o: undefined reference to symbol '[email protected]@CXXABI_1.3.7'

/usr/lib/libstdc++.so.6:-1: error: error adding symbols: DSO missing from command line

Ich Kompilieren und Linken die -stdlib=libc++ -lc++abi Flags verwenden.

Gibt es eine zusätzliche Bibliothek, die ich verknüpfen sollte? Vermisse ich eine Flagge?

+0

Eine schnelle Google-Suche deutet darauf hin, dass dies in C++ ABI nicht implementiert ist. –

Antwort

7

Entweder Verbindung mit -lsupc++ oder bieten einen kleinen Wrapper-Funktion (wahrscheinlich der bessere Weg für libc++) für die glibc Umsetzung:

extern "C" int __cxa_thread_atexit(void (*func)(), void *obj, 
            void *dso_symbol) { 
    int __cxa_thread_atexit_impl(void (*)(), void *, void *); 
    return __cxa_thread_atexit_impl(func, obj, dso_symbol); 
} 

Es kann sich lohnen, zu erwähnen, dass dies nur mit glibc arbeitet> = 2,18 .