2015-03-28 11 views
5

sto cercando di compilare i miei progetti su Arch Linux x64 utilizzando libC++, libC++ abi e clang ++ 3.6. 0.undefined reference to __cxa_thread_atexit @@ CXXABI` `` quando si compila con libC++ `su linux

I progetti compilano correttamente, ma non riescono a collegarsi con il seguente errore:

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

Sto compilando e il collegamento con i -stdlib=libc++ -lc++abi bandiere.

C'è qualche libreria aggiuntiva che dovrei collegare? Mi manca una bandiera?

+0

Una rapida ricerca su Google suggerisce che questo non è implementato nell'ABI C++. –

risposta

7

O legame con -lsupc++ o fornire una piccola funzione wrapper (probabilmente il modo migliore per libc++) per l'attuazione glibc:

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); 
} 

Può valere la pena di ricordare che questo funziona solo con glibc> = 2.18 .