我想知道在Ubuntu上安装二进制libc++的正确/简单的方法是什么?
在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++,任何指向安装二进制文件的指示都将受到感谢。
发布于 2017-05-04 04:52:04
如何在Ubuntu16.04上构建libc++
我遇到了和你类似的问题。虽然在libstdc++上测试clang在C++11和C++14上工作得很好,但libstdc++仍然可能存在许可问题。因此,我最终从他们的资源库中安装了Clang toolchain,并在Ubuntu16.04上编译了libc++。
免责声明:这篇文章是对如何在Ubuntu Linux上构建libc++的长期研究的总结。我在2017年发现的许多帖子要么过时了,要么描述了其他系统上的部分解决方案,例如CentOS。这些帖子的链接如下:
下面是从4.0版本分支构建LLVM + Clang + libc++的步骤:
# 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 -
# 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 <代码>C30<代码>D31<代码>C32 llvm-toolchain-xenial-4.0 main EOF
# 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
cc或c++或clang++。请记住,我们默认切换到LLD链接器:libc++ 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++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++需要与标准库兼容,例如libstdc++。这就是libc++abi进入游戏的地方。唯一的问题是,它需要在为其构建的系统上安装libc++。因此,libc++的构建分两步完成。第一:没有任何ABI兼容性。但它将用于ABI库的引导,然后第二步是使用系统上存在的适当ABI重新编译libc++:在没有适当ABI的情况下启动=> build 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
使用兼容libstdc++的ABI构建libc++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=Release -DCMAKE_INSTALL_PREFIX=/usr \ -DLLVM_CONFIG_PATH=/usr/bin/llvm-config-4.0 \ -DLIBCXXABI_LIBCXX_INCLUDES=../../libcxx/include .. make install
使用在系统上部署的适当ABI库重新构建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
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运行时库。我同意应该有一个涵盖九成个案的方案。也许这只是资源的匮乏。Searching the mailing archive没有提出任何特别的东西。
发布于 2017-08-16 11:30:59
sudo apt-get update
sudo apt-get install libc++-dev发布于 2021-11-21 16:19:38
被接受的答案给了我一些错误(目前是2021年11月)。此外,sudo apt install libc++-dev libc++abi-dev没有提供最新的libc++。这里有一个替代的解决方案。
使用LLVM apt package maintainer的脚本:
sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"
这将自动设置apt存储库并为您提供最新的LLVM工具链。
clang-13 --version
既然现在已经有了http://apt.llvm.org提供的最新libc++包,就可以安装最新的LLVM了。首先确定最新版本:
apt search libc++ | grep libc++
然后:
sudo apt install libc++-13-dev libc++abi-13-dev
您可以选择使用update-alternatives使您的系统使用clang-13而不是默认设置。对此有一个gist:
wget https://gist.githubusercontent.com/junkdog/70231d6953592cd6f27def59fe19e50d/raw/update-alternatives-clang.sh
chmod +x update-alternatives-clang.sh
sudo ./update-alternatives-clang.sh 13 1000现在:
clang --version
Debian clang version 13.0.1-++20211110062941+9dc7d6d5e326-1~exp1~20211110183517.26
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/binhttps://stackoverflow.com/questions/39332406
复制相似问题