web-dev-qa-db-ja.com

libc ++をUbuntuにインストールする

Ubuntuにバイナリlibc ++をインストールする正しい/簡単な方法は何ですか?私の場合はTrusty aka 14.04?

LLVM Webサイトには、aptパッケージ http://apt.llvm.org/ があり、これらを使用して3.9をインストールしました。ただし、これらのパッケージにはlibc ++が含まれていないようです。 libc ++-devパッケージをインストールしますが、それは本当に古いバージョンのようです。ダウンロードできるバイナリもあります http://llvm.org/releases/download.html#3.9. 。これらにはlibc ++が含まれているように見えますが、このビットを/ usr/include/c ++/v1などの場所にコピーできるかどうかはわかりません。実際、どのビットをコピーする必要があるかはわかりません。ここに記載されているように、別の場所からlibc ++を使用できることを知っています http://libcxx.llvm.org/docs/UsingLibcxx.html 試しました。ただし、これを行うために取り組んでいる大規模なコードベースのビルドシステムを変更することはできません。

ですから、aptパッケージにlibc ++が含まれておらず、バイナリをインストールするためのポインタがありがたく受け取られる理由は3つあります。

16
goneskiing

Ubuntu 16.04でlibc ++をビルドする方法

あなたと同じような問題がありました。 libstdc ++を使用したclangのテストはC++ 11およびC++ 14で正常に機能しましたが、libstdc ++のライセンスに関する問題がまだ残っている可能性があります。そのため、リポジトリからClangツールチェーンをインストールし、Ubuntu 16.04でlibc ++をコンパイルしました。

免責事項:この投稿は、Ubuntu Linuxで_libc++_をビルドする方法に関する長い検索の要約です。 2017年に私が見つけた投稿の多くは、時代遅れであるか、他のシステムでの部分的な解決策を説明したものです。 CentOS。これらの投稿へのリンクは次のとおりです。

4.0リリースブランチからLLVM + Clang + libc ++をビルドする手順は次のとおりです。

  1. LLVMリポジトリのキーをインストールする

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

  2. 新しいAPTリポジトリファイルを作成します(v3.9リポジトリを参照する2行を除外することもできます)

    _# 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. LLVMリポジトリからlibc ++をビルドするために必要なClangおよびすべてのパッケージをインストールします

    _# 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. C++コンパイラとリンカーの代替を作成します。これは必須ではありませんが、必要に応じてコンパイラまたはリンカーを切り替えることができます。また、いくつかのビルドファイルには、ccまたは_c++_または_clang++_が必要でした。デフォルトとしてLLDリンカーに切り替えることに注意してください。

    _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. _libc++_および_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. Linuxで_libc++_を実行するには、標準ライブラリとのABI互換性が必要です。 libstdc ++。これが_libc++abi_が登場する場所です。唯一の問題は、ビルド対象のシステム上に_libc++_が必要であることです。したがって、_libc++_は2つのステップで構築されます。最初:ABI互換性なし。ただし、ABI libのブートストラップに使用され、2番目のステップは、システムに存在する適切なABIで_libc++_を再コンパイルすることです。

    ブートストラップ=>適切なABIを使用せずに_libc++_をビルドします。

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

    _libc++abi_互換のABIを使用して_libstdc++_を構築する:

    _cd /tmp/libcxxabi/build CPP_INCLUDE_PATHS=_ echo | c ++ -Wp、-v -x c ++--fsyntax-only 2>&1\| grep '/ usr' | tr '\ n' '' | tr -s '' | tr '' ';' A usr/bin/llvm-config-4.0\-DLIBCXXABI_LIBCXX_INCLUDES = ../../libcxx/include .. make install

    システムにデプロイされた適切なABI libで_libc++_を再構築します。

    _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. テストファイルを作成して、すべてが正常に機能するかどうかを確認します。 IMOではcerrストリームもテストする必要があります。以前は_libc++abi_でサポートされておらず、いくつかのセグメンテーション違反があったためです。 この質問 を参照してください。

    test.cppファイルを作成します。

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

    そして、次のコマンドラインを使用してコンパイルし、実行します。

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

パッケージがない理由

Ubuntu用のlibc ++パッケージを見つけましたが、最近のバージョンより少し遅れています: https://packages.ubuntu.com/xenial/libc++-dev

なぜ最新のものではないのか、私は答えられませんが、私の推測では、LLVM + Clangはほとんどすべての標準ライブラリで動作しますが、libc ++は特定のランタイムABIにリンクする必要があり、利用可能なCランタイムライブラリに大きく依存する可能性があります。ケースの90%をカバーするパッケージが必要であることに同意します。これは単にリソースの不足かもしれません。 メーリングアーカイブの検索 は、特別なものを表示しませんでした。

29
ovanes
Sudo apt-get update
Sudo apt-get install libc++-dev
9
akash

動作するlibc ++を取得する最も簡単な方法は、/usr/localの下に3.9.0ツールチェーン全体をインストールすることです。これにより、/ usr/local/bin/clang ++がヘッダーを正しく検索できるようになり、リンカーが/usr/local/lib/libc++.soを検索できるようになります。

1
EricWF