【问题标题】:Selecting a specific libstdc++ version with clang使用 clang 选择特定的 libstdc++ 版本
【发布时间】:2017-03-22 00:41:18
【问题描述】:

我使用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
  • @NarekAtayan 在未安装gcc 4.8 的类似系统中,clang 的相同版本(特别是3.4)使用gcc 4.6。因此,可以不使用不同版本的clang
  • 嗯,可以是impossible
  • 您是否尝试过使用--gcc-toolchain=/path/to/gcc/prefix 命令行选项?如here 所述,它应该使 Clang 使用特定版本的 GCC 工具链,包括 libstdc++clang++:“Clang 将在其自己的 libstdc++ 前缀中查找并在找到时使用它。您还可以添加显式Clang 的前缀以查找带有 --gcc-toolchain=/opt/my/gcc/prefix 标志的 GCC 工具链,并将其传递给编译和链接命令”。

标签: c++ ubuntu gcc clang libstdc++


【解决方案1】:

正如您从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 ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-04
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 2020-10-09
    相关资源
    最近更新 更多