web-dev-qa-db-ja.com

clangで特定のgccツールチェーンを選択する方法

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

clangに別のgccインストール、たとえば5.4.1を強制的に使用させるにはどうすればよいですか?

--gcc-toolchain = "/ usr/lib/gcc/x86_64-linux-gnu/5.4.1"でclangを呼び出そうとしましたが、成功しませんでした。

14
Gaetano

--gcc-toolchainの有効なパスは、clangがgccを探すように見えるので、明らかに「/ usr」です。

$PREFIX/{include|lib}/gcc/$PLATFORM/$VERSION/*

回避策として、overlay-fsを使用してファイルシステムを作成するか、1つのフォルダーのみを含むフォルダー構造にシンボリックリンクを作成することで、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

ただし、フラグを使用してバージョンを選択するようにclangに指示することにより、より良い方法があるかもしれません...

6
Gaetano