如何在clang中选择特定的gcc-toolchain?

Gae*_*ano 13 c++ linux gcc clang

Clang自动选择具有最高版本的gcc版本:

$ clang++ -v main.cpp
clang version 3.8.1-12 
(tags/RELEASE_381/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/4.9
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/4.9.4
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.1
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/6.2.0
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7.0.1
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9.4
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5.4.1
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6.2.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.0.1
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7.0.1
Run Code Online (Sandbox Code Playgroud)

我怎么能强迫clang使用不同的gcc安装,比如说5.4.1?

我试图用--gcc-toolchain ="/ usr/lib/gcc/x86_64-linux-gnu/5.4.1"调用clang,但没有成功.

Gae*_*ano 6

--gcc-toolchain的有效路径显然是"/ usr",因为clang似乎在寻找gcc

$PREFIX/{include|lib}/gcc/$PLATFORM/$VERSION/*
Run Code Online (Sandbox Code Playgroud)

所以作为一种解决方法,您可以通过使用overlay-fs创建文件系统或者通过符号链接仅包含一个文件夹的文件夹结构来欺骗clang使用特定版本

mkdir $MYTOOLCHAIN
cd $MYTOOLCHAIN
ln -s /usr/include include #for headerfiles
ln -s /usr/bin bin #for tools like ld
mkdir -p lib/gcc/x86_64-linux-gnu/ #clang will deduce what to select
cd lib/gcc/x86_64-linux-gnu/
#link the toolchain we want here
ln -s /usr/lib/gcc/x86_64-linux-gnu/$VERSION $VERSION 
#usage: clang++ --gcc-toolchain=$MYTOOLCHAIN main.cpp
Run Code Online (Sandbox Code Playgroud)

但也许通过指示clang通过旗帜挑选版本有更好的方法......


Seb*_*edl 5

从 Clang-16 开始,您可以使用 --gcc-install-dir 来简单地传递 GCC 安装的完整路径。