暴力切换clang++的gcc版本 作者: LiesAuer 时间: 2020-03-19 分类: 开发 ## 当前已安装的gcc版本 ```shell liesauer@LA-Tower:/mnt/o/Projects/core-setup$ clang++-3.9 -v clang version 3.9.1-19ubuntu1 (tags/RELEASE_391/rc2) 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.8 Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/4.8.5 Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7 Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5 Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/8 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8.5 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.5 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/8 Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5 Candidate multilib: .;@m64 Selected multilib: .;@m64 ``` ## 常规方式切换 通过网上大量查阅资料,发现都是通过设置环境变量或者传递参数到clang++实现gcc版本切换,但由于我是使用提供的脚本进行编译,各种环境变量都被脚本控制得死死的,而且编译前都要进行`git reset --hard HEAD`,所以修改编译脚本也不现实。 ## 暴力方式切换 既然常规方式无法切换,那尝试把`gcc-7`卸载了?然而卸载后发现仍然是`gcc-7.5`,既然如此,那我连同`/usr/lib/gcc/x86_64-linux-gnu/7.5`也删了呢?经发现`/usr/lib/gcc/x86_64-linux-gnu/7.5`其实是`/usr/lib/gcc/x86_64-linux-gnu/7`的软链,那话不多说,直接`sudo rm /usr/lib/gcc/x86_64-linux-gnu/7.5`,然后再把7移到别的地方`sudo mv /usr/lib/gcc/x86_64-linux-gnu/7 /usr/lib/gcc/7`,重新执行`clang++-3.9 -v`  可以发现已经正确切换到`4.8`版本的,`4.8.5`是`4.8`的软链,所以实际上他们是一样的,如果还不是你所需要的版本就继续操作,直到正确切换到你所需要的版本 ## 重新编译 重新编译发现报错 ``` /usr/bin/ld: cannot find -lstdc++ ``` 这是由于缺少正确的`libstdc++`造成的,由于我的gcc是`4.8`版本,所以直接`sudo apt-get install libstdc++-4.8-dev`进行安装,安装完成后再次编译  成功编译 标签: none
您好,请问如何通过 设置环境变量或者传递参数到clang++实现gcc版本切换,安装的 clang 默认选择的 gcc 是 7.5,但是我后来安装了 gcc12,在 /usr/local/bin 中,那么如何让 clang 选择 gcc12 呢?
你可以尝试使用update-alternatives切换默认的gcc版本,原理是切换/usr/bin/gcc的软链,如果你的编译脚本并不使用/usr/bin/gcc且有自己的寻找逻辑且脚本可受你修改控制,可以尝试传递--gcc-toolchain参数给clang,你这种情况使用update-alternatives应该可以解决。