使用clang选择一个特定的libstdc++版本

Selecting a specific libstdc++ version with clang

本文关键字:libstdc++ 版本 一个 选择 clang 使用      更新时间:2023-10-16

我使用clang++编译c++代码。我链接到gcc标准c++库,libstdc++。但是,我在我的Ubuntu机器上安装了几种不同的libstdc++。当我运行clang++时,它使用libstdc++的4.8安装:

andy@andy:~$ clang++-3.5 -v
Ubuntu clang version 3.5.0-4ubuntu2~trusty2 (tags/RELEASE_350/final) (based on LLVM 3.5.0)
Target: i386-pc-linux-gnu
Thread model: posix
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/4.6
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/4.6.4
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/4.8
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/4.8.4
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/4.9
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/4.9.3
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/4.6
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/4.6.4
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/4.8
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/4.8.4
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/4.9
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/4.9.3
Selected GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/4.8
Candidate multilib: .;@m32
Selected multilib: .;@m32

我怎么能告诉clang++使用libstdc++库和头文件的不同版本?具体来说,我想使用4.6版本。

正如您从clang++ -v的输出中看到的那样,它将默认使用它在给定的"前缀"(即安装目录)中找到的最新gcc安装。

gcc的多个版本的安装方式的问题是,例如在Ubuntu上,它们都使用相同的前缀,/usr

所以,我使用的解决方案是创建一堆假安装,每个都有自己的前缀:/usr/local/gcc/5.5.0, /usr/local/gcc/6.4.0, /usr/local/gcc/7.3.0等:

VERSION=6.4.0
sudo mkdir -p /usr/local/gcc/$VERSION/include/c++
sudo ln -s /usr/include/c++/$VERSION /usr/local/gcc/$VERSION/include/c++/$VERSION
sudo mkdir -p /usr/local/gcc/$VERSION/lib/gcc/x86_64-unknown-linux-gnu
sudo ln -s /usr/lib/gcc/x86_64-linux-gnu/$VERSION /usr/local/gcc/$VERSION/lib/gcc/x86_64-unknown-linux-gnu/$VERSION

现在我可以通过--gcc-toolchain选项指示clang++使用特定版本的gcc库:

clang++ --gcc-toolchain=/usr/local/gcc/6.4.0 ...