Installiere libc ++ auf ubuntu

9

Ich frage mich, was ist die richtige / einfache Möglichkeit, eine binäre libc ++ auf Ubuntu zu installieren, in meinem Fall Trusty aka 14.04?

Auf der LLVM-Website gibt es apt-Pakete Ссылка und ich habe diese zur Installation von 3.9 verwendet. Diese Pakete scheinen jedoch libc ++ nicht zu enthalten. Ich installiere das libc ++ - dev Paket, aber das scheint eine wirklich alte Version zu sein. Es gibt auch Binärdateien, die Ссылка heruntergeladen werden können. Diese scheinen libc ++ zu enthalten, aber ich bin nicht sicher, ob ich nur Bits davon in Orte wie / usr / include / c ++ / v1 kopieren kann, tatsächlich bin ich nicht wirklich sicher, welche Bits ich kopieren müsste. Ich bin mir bewusst, dass ich libc ++ von einem anderen Ort verwenden kann, wie hier dokumentiert Ссылка , was ich versucht habe. Allerdings kann ich das Build-System der großen Codebasis, an der ich arbeite, nicht ändern.

Es gibt also drei Gründe, warum die apt-Pakete libc ++ nicht enthalten und alle Hinweise zur Installation einer Binärdatei werden dankbar angenommen.

    
goneskiing 05.09.2016, 14:07
quelle

3 Antworten

16

Wie man libc ++ unter Ubuntu 16.04 erstellt

Ich hatte ein ähnliches Problem wie Sie. Während das Testen von clash mit libstdc ++ mit C ++ 11 und C ++ 14 gut funktionierte, konnte es immer noch zu Lizenzproblemen mit libstdc ++ kommen. Also habe ich Clang Toolchain aus ihren Repos installiert und libc ++ unter Ubuntu 16.04 kompiliert.

Disclaimer: Dieser Post ist eine Zusammenfassung der langen Suche, wie man das libc++ unter Ubuntu Linux erstellt. Viele der Beiträge, die ich im Jahr 2017 gefunden habe, waren entweder veraltet oder beschrieben eine teilweise Lösung auf anderen Systemen, z. CentOS. Links zu diesen Beiträgen sind:

Hier sind die Schritte, um LLVM + Clang + libc ++ von der Version 4.0 zu haben:

  1. Installieren Sie den Schlüssel von LLVM-Repositories

    # apt-get update && apt-get dist-upgrade -y && apt-get install -y vim curl && \ curl -q http://apt.llvm.org/llvm-snapshot.gpg.key |apt-key add -

  2. Erstellen Sie eine neue neue APT-Repository-Datei (Sie können auch zwei Zeilen ausschließen, die sich auf v3.9-Repos beziehen)

    # cat > /etc/apt/sources.list.d/llvm-repos.list <<EOF deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial main deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial main deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-3.9 main deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-3.9 main deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-4.0 main deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-4.0 main EOF

  3. Installieren Sie Clang und alle Pakete, die zum Erstellen von libc ++ aus LLVM-Repositorys erforderlich sind

    # apt-get update && apt-get install -y clang-4.0 clang-4.0-doc \ libclang-common-4.0-dev libclang-4.0-dev libclang1-4.0 libclang1-4.0-dbg \ libllvm4.0 libllvm4.0-dbg lldb-4.0 llvm-4.0 llvm-4.0-dev llvm-4.0-runtime \ clang-format-4.0 python-clang-4.0 liblldb-4.0-dev lld-4.0 libfuzzer-4.0-dev \ subversion cmake

  4. Erstellen Sie eine Alternative für C ++ - Compiler und -Linker. Dies ist kein Muss, aber Sie können Compiler oder Linker bei Bedarf wechseln. Auch einige Build-Dateien benötigten cc oder c++ oder clang++ , soweit ich mich erinnere. Beachten Sie, dass wir standardmäßig zu LLD Linker wechseln:

    update-alternatives --install /usr/bin/cc cc /usr/bin/clang-4.0 100 \ && update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++-4.0 100 \ && update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-4.0 100 \ && update-alternatives --install /usr/bin/clang clang /usr/bin/clang-4.0 100 \ && update-alternatives --install /usr/bin/ld ld /usr/bin/ld.lld-4.0 10 \ && update-alternatives --install /usr/bin/ld ld /usr/bin/ld.gold 20 \ && update-alternatives --install /usr/bin/ld ld /usr/bin/ld.bfd 30 \ && ld --version && echo 3 | update-alternatives --config ld && ld --version

  5. Überprüfen Sie die Quellen von libc++ und libc++abi :

    $ cd /tmp $ svn co http://llvm.org/svn/llvm-project/libcxx/branches/release_40/ libcxx $ svn co http://llvm.org/svn/llvm-project/libcxxabi/branches/release_40/ libcxxabi $ mkdir -p libcxx/build libcxxabi/build

  6. Um libc++ unter Linux auszuführen, benötigt man eine ABI-Kompatibilität zu der Standardbibliothek, z.B. libstdc ++. Hier kommt libc++abi ins Spiel. Das einzige Problem ist, dass libc++ auf dem System sein muss, für das es erstellt wurde. Somit ist libc++ in 2 Schritten aufgebaut. Erstens: ohne ABI-Kompatibilität. Aber es wird für das Bootstrapping von ABI-lib verwendet und als der zweite Schritt ist es, libc++ mit dem richtigen ABI auf dem System neu zu kompilieren:

    Bootstraping = & gt; bilde libc++ ohne richtiges ABI:

    cd /tmp/libcxx/build cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_CONFIG_PATH=/usr/bin/llvm-config-4.0\ -DCMAKE_INSTALL_PREFIX=/usr .. \ && make install

    Building libc++abi mit libstdc++ kompatibel ABI:

    cd /tmp/libcxxabi/build CPP_INCLUDE_PATHS=echo | c++ -Wp,-v -x c++ - -fsyntax-only 2>&1 \ |grep ' /usr'|tr '\n' ' '|tr -s ' ' |tr ' ' ';' CPP_INCLUDE_PATHS="/ usr / include / c ++ / v1 /; $ CPP_INCLUDE_PATHS" cmake -G "Unix-Makefiles" -DLIBCXX_CXX_ABI = libstdc ++ \       -DLIBCXX_LIBSUPCXX_INCLUDE_PATHS="$ CPP_INCLUDE_PATHS" \       -DMAKE_BUILD_TYPE = Freigabe -DCMAKE_INSTALL_PREFIX = / usr \       -DLLVM_CONFIG_PATH = / usr / bin / llvm-config-4.0 \       -DLIBCXXABI_LIBCXX_INCLUDES = .. / .. / libcxx / include .. make install

    Erstellen Sie libc++ mit der richtigen ABI-Lib, die auf dem System implementiert ist:

    cd /tmp/libcxx/build cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \ -DLIBCXX_CXX_ABI=libcxxabi -DLLVM_CONFIG_PATH=/usr/bin/llvm-config-4.0\ -DLIBCXX_CXX_ABI_INCLUDE_PATHS=../../libcxxabi/include .. \ && make install

  7. Erstellen Sie eine Testdatei, um zu prüfen, ob alles in Ordnung ist. IMO sollten Sie auch cerr stream testen, da es zuvor nicht mit dem libc++abi unterstützt wurde und es einige segfaults gab. Siehe diese Frage .

    Erstellen Sie eine test.cpp-Datei:

    #include <iostream> int main() { using namespace std; cout << "[OK] Hello world to cout!" << endl; cerr << "[OK] Hello world to cerr!" << endl; clog << "[OK] Hello world to clog!" << endl; return 0; }

    Und kompilieren Sie es und führen Sie es mit dieser Befehlszeile aus:

    clang++ -std=c++11 -stdlib=libc++ -lc++abi test.cpp && ./a.out

Grund gibt es kein Paket

Ich habe libc ++ Pakete für Ubuntu gefunden, aber sie sind ein bisschen hinter der letzten Version: Ссылка

Warum sie nicht aktuell sind, kann ich nicht beantworten, aber meine Vermutung ist, dass LLVM + Clang mit fast jeder Standardbibliothek funktionieren kann, während libc ++, wie Sie sehen, mit bestimmten Laufzeit-ABI verknüpft sein muss und stark von verfügbar abhängen kann C-Laufzeitbibliothek. Ich stimme zu, dass es ein Paket geben sollte, das 90% der Fälle abdeckt. Vielleicht ist dies nur der Mangel an Ressourcen. Im Mailing-Archiv suchen brachte nichts besonderes.

    
ovanes 03.05.2017 20:52
quelle
3
%Vor%     
akash 16.08.2017 03:30
quelle
-1

Der einfachste Weg, um eine funktionierende libc ++ zu erhalten, ist die Installation der gesamten 3.9.0 Toolchain unter /usr/local . Dies erlaubt / usr / local / bin / clang ++, die Header korrekt zu finden und dem Linker auch die Möglichkeit zu geben, / usr / local / lib / libc ++. So.

zu finden     
EricWF 07.09.2016 09:05
quelle

Tags und Links