Clang automatycznie wybiera wersję gcc z najwyższą wersją:
$ 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
jak mogę wymusić na clangu użycie innej instalacji gcc, np. 5.4.1?
Próbowałem wywołać klang za pomocą --gcc-toolchain = "/ usr / lib / gcc / x86_64-linux-gnu / 5.4.1", ale bez powodzenia.
Odpowiedzi:
4 dla odpowiedzi № 1Poprawna ścieżka dla --gcc-toolchain najwyraźniej "/ usr", ponieważ wydaje się, że clang szuka gcc w
$PREFIX/{include|lib}/gcc/$PLATFORM/$VERSION/*
tak, aby obejść, możesz oszukać klang, aby użyć konkretnej wersji, tworząc system plików z nakładką-fs lub dowiązaniem symbolicznym do struktury folderów zawierającej tylko jeden folder
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
jednak być może jest lepszy sposób, polecając mu wybieranie wersji przez flagę ...