2013-07-29 10 views
9

Modifica/Aggiorna/Nota: lascia che clang usi libstdC++. Ha funzionato davvero bene per me finora.Qual è il modo sanzionato per creare libC++ per clang su Linux?

===============================

In passato sono stato in grado di avere successo facendo qualcosa con cmake, ma proprio ora ho scoperto uno script buildit all'interno della directory lib dell'albero del progetto http://llvm.org/svn/llvm-project/libcxx/trunk.

Questo script buildit sembra non utilizzare libsupc++ che è l'approccio cmake che ho utilizzato in precedenza. Ad esempio, this guide mostra un incantesimo cmake per produrre un makefile per libc++, che sarà in grado di occuparsi della compilazione e dell'installazione.

La mia domanda è qual è la differenza tra questi diversi modi di produrre il LLVM-libc++ e quale dovrebbe essere utilizzato? Si comportano diversamente?

Lo script buildit non sembra fornire alcun aiuto per l'installazione. Ci sono indicazioni da qualche parte su come installare correttamente la libreria? Con la mia precedente libC++ costruita con cmake, dovevo sempre aggiungere -lc++ ai flag del linker (e al percorso con -L), che non è necessario nei miei makefile OS X.

+0

Ho letto un po 'di più sul proprio quello che 'libsupC++' è, ed a quanto pare è un sottoinsieme di GCC di 'libC++'. Lo script 'buildit' sembra collegare' libC++ ', quindi immagino che nulla sia sorprendente qui, e forse ho solo bisogno di modificare alcuni flag' cmake' per ottenere un'installazione più snella. Tuttavia, apprezzerei alcune spiegazioni generali di qualcuno che ne sa più di me su LLVM. –

+0

significa che 'libsupC++' fornisce alcune funzionalità relative ad ABI (e altre) per 'libstdC++' di GCC. – rubenvb

risposta

3

Il libc++ website ha una buona panoramica dei possibili modi per creare libC++.

Suggerisco di utilizzare CMake + libc++abi.

Vedere anche lo Arch Linux User Repository build script, che utilizza lo script buildit. Ho installato libC++ da questo e lo ha utilizzato con il pacchetto di Arch Linux Clang con successo utilizzando

clang++ -std=c++11 -stdlib=libc++ -lc++abi 
+3

Beh, sono su CentOS 6.4, il che rende leggermente più difficile del solito far funzionare le cose perché molti elementi sono ... vecchi. Ho dovuto includere i percorsi extra '/ usr/include/C++/4.4.4;/usr/include/C++/4.4.4/x86_64-redhat-linux' oltre alle dir 4.4.7, e anche copiare' cxxabi -forced.h' (che era in '4.4.4 /') a 'bits/cxxabi_forced.h', prima che la chiamata' cmake' abbia esito positivo. Questo è troppo doloroso! Questo andrà nello script di init della mia macchina, quindi starò bene per un po '. Ma qualcuno ha bisogno di inventare qualcosa di meno doloroso perché questo è 'cmake' non facendo il suo unico e unico lavoro. –

+1

Ho anche dovuto cambiare all'interno di 'cxxabi.h' il' # include' di 'cxxabi-forced.h' a' bits/cxxabi_forced.h' per ottenere la libC++. Così chiamata 'make' per avere successo. –

+1

Questo non funziona più (con SVN libC++). Con la conseguente libC++. Quindi, qualsiasi tentativo di compilazione con '-std = C++ 0x -stdlib = libC++' si traduce in un misterioso 'riferimento non definito a \ 'vtable per std :: nested_exception'' –

Problemi correlati