gpt4 book ai didi

clang - 在 ubuntu 上安装 libc++

转载 作者:行者123 更新时间:2023-12-03 13:19:20 25 4
gpt4 key购买 nike

我想知道在 Ubuntu 上安装二进制 libc++ 的正确/简单方法是什么,在我的情况下是 Trusty aka 14.04?

在 LLVM 网站上有 apt 包 http://apt.llvm.org/我已经用这些来安装 3.9。然而,这些包似乎不包含 libc++。我安装了 libc++-dev 包,但这似乎是一个非常旧的版本。还有二进制文件可以下载http://llvm.org/releases/download.html#3.9.0 .这些似乎确实包含 libc++,但我不确定我是否可以将其中的一部分复制到/usr/include/c++/v1 之类的地方,实际上我不确定我需要复制哪些位。我知道我可以从这里记录的备用位置使用 libc++ http://libcxx.llvm.org/docs/UsingLibcxx.html我试过。但是,我无法修改我为此工作的大型代码库的构建系统。

apt 包不包含 libc++ 的三个原因也是如此,并且将不胜感激地收到任何安装二进制文件的指针。

最佳答案

如何在 Ubuntu 16.04 上构建 libc++

我和你有类似的问题。虽然使用 libstdc++ 测试 clang 在 C++11 和 C++14 上运行良好,但 libstdc++ 仍然可能存在许可问题。所以我最终从他们的 repos 安装了 Clang 工具链,并在 Ubuntu 16.04 上编译了 libc++。

免责声明:这篇文章是关于如何构建 libc++ 的长期搜索的总结。在 Ubuntu Linux 上。我在 2017 年发现的许多帖子要么已经过时,要么描述了其他系统上的部分解决方案,例如CentOS。这些帖子的链接是:

  • Hacking with Clang llvm abi and llvm libc
  • Building Clang and libc++ on Ubuntu Linux
  • How to Build libcxx and libcxxabi by clang on CentOS 7

  • 以下是从 4.​​0 发布分支构建 LLVM + Clang + libc++ 的步骤:
  • 安装 LLVM Repositories 的 key
    # 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 -
  • 创建一个新的 APT Repository File(你也可以排除 2 行引用 v3.9 repos)
    # 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
  • 安装 Clang 和从 LLVM 存储库构建 libc++ 所需的所有包
    # 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
  • 创建 C++ 编译器和链接器的替代方案。这不是必须的,但可以让您在需要时切换编译器或链接器。还需要一些构建文件 ccc++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
  • 结帐来源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
  • 运行 libc++在 Linux 上,需要 ABI 与标准库的兼容性,例如libstdc++。这是哪里libc++abi进入游戏。唯一的问题是它需要libc++位于为其构建的系统上。因此libc++分两步构建。第一:没有任何 ABI 兼容性。但它将用于 ABI 库的引导,然后第二步是重新编译 libc++系统上存在正确的 ABI:

    引导 => 构建 libc++没有适当的 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

    大厦libc++abilibstdc++兼容的 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"\
    -DCMAKE_BUILD_TYPE=发布 -DCMAKE_INSTALL_PREFIX=/usr\
    -DLLVM_CONFIG_PATH=/usr/bin/llvm-config-4.0\
    -DLIBCXXABI_LIBCXX_INCLUDES=../../libcxx/include ..
    进行安装

    重建 libc++在系统上部署了适当的 ABI 库:
    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
  • 创建一个测试文件以检查是否一切正常。 IMO 你也应该测试 cerr流,如前所述,libc++abi 不支持它并且有一些段错误。请引用this question .

    创建一个 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% 案例的包。可能这只是缺乏资源。 Searching the mailing archive没有提出任何特别的东西。

    关于clang - 在 ubuntu 上安装 libc++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39332406/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com