在openSUSE Leap 15.6 下安装 gcc15
如果安装的系统是 openSUSE Leap 15.6, 那么gcc 默认安装的是 7.5.0 版本, 如果安装 clang, 则 clang 会默认寻找 gcc15 的头文件. 这会导致 clang 找不到 algorithm 这样的头文件.
事实上, 可能同时安装了 gcc7 和 gcc15
ls -la /usr/bin/gcc*
lrwxrwxrwx 1 root root 5 8月 23 2021 /usr/bin/gcc -> gcc-7
-rwxr-xr-x 2 root root 2210656 2月 10 2026 /usr/bin/gcc-15
-rwxr-xr-x 1 root root 1026488 1月 25 2025 /usr/bin/gcc-7
lrwxrwxrwx 1 root root 8 8月 23 2021 /usr/bin/gcc-ar -> gcc-ar-7
-rwxr-xr-x 1 root root 35488 2月 10 2026 /usr/bin/gcc-ar-15
-rwxr-xr-x 1 root root 31168 1月 25 2025 /usr/bin/gcc-ar-7
lrwxrwxrwx 1 root root 8 8月 23 2021 /usr/bin/gcc-nm -> gcc-nm-7
-rwxr-xr-x 1 root root 35488 2月 10 2026 /usr/bin/gcc-nm-15
-rwxr-xr-x 1 root root 31168 1月 25 2025 /usr/bin/gcc-nm-7
lrwxrwxrwx 1 root root 12 8月 23 2021 /usr/bin/gcc-ranlib -> gcc-ranlib-7
-rwxr-xr-x 1 root root 35488 2月 10 2026 /usr/bin/gcc-ranlib-15
-rwxr-xr-x 1 root root 31168 1月 25 2025 /usr/bin/gcc-ranlib-7
上面表明, 系统同时安装了 GCC 7.5.0 和 GCC 15,而 /usr/bin/gcc 软链接指向的是 GCC 7.
但是 Clang 17 在编译时默认去找 GCC 15 的头文件路径, 这就是为什么报错 ignoring nonexistent directory "/usr/bin/../lib64/gcc/x86_64-suse-linux/15/..."
解决办法是安装 GCC 15 的 C++ 头文件(让 Clang 正常工作)
Clang 17 想用 GCC 15 的头文件, 但 GCC 15 可能只安装了 gcc 没有安装 g++ 开发包. 使用下面的命令安装完整的 GCC 15:
sudo zypper install gcc15-c++
安装后,GCC 15 的 C++ 头文件会在 /usr/include/c++/15/,Clang 就能找到了.
测试
1. 创建测试文件 test.cpp
echo '#include ' > test.cpp
2. 编译
clang++ -I/usr/include/c++/7 -I/usr/include/x86_64-linux-gnu/c++/7 -L/usr/lib64 test.cpp -c -o test.o
3. 返回下面的表示正常工作
clang++: warning: argument unused during compilation: '-L/usr/lib64' [-Wunused-command-line-argument]
输入下面的命令, 测试 Clang 是否能自动找到 GCC 15 的头文件
# clang++ -v -x c++ /dev/null -fsyntax-only 2>&1 | grep -A 20 "include"
"/usr/bin/clang-17" -cc1 -triple x86_64-suse-linux -fsyntax-only -disable-free -clear-ast-before-backend -disable-
llvm-verifier -discard-value-names -main-file-name null -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-poi
nter=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-6
4 -tune-cpu generic -debugger-tuning=gdb -v -fcoverage-compilation-dir=/usr/lib64/clang/17 -resource-dir /usr/lib64
/clang/17 -internal-isystem /usr/bin/../lib64/gcc/x86_64-suse-linux/15/../../../../include/c++/15 -internal-isystem
/usr/bin/../lib64/gcc/x86_64-suse-linux/15/../../../../include/c++/15/x86_64-suse-linux -internal-isystem /usr/bin
/../lib64/gcc/x86_64-suse-linux/15/../../../../include/c++/15/backward -internal-isystem /usr/lib64/clang/17/includ
e -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib64/gcc/x86_64-suse-linux/15/../../../../x86
_64-suse-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdeprecated-macro
-fdebug-compilation-dir=/usr/lib64/clang/17 -ferror-limit 19 -fgnuc-version=4.2.1 -fcxx-exceptions -fexceptions -f
addrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -x c++ /dev/null
clang -cc1 version 17.0.6 based upon LLVM 17.0.6 default target x86_64-suse-linux
ignoring nonexistent directory "/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/bin/../lib64/gcc/x86_64-suse-linux/15/../../../../include/c++/15
/usr/bin/../lib64/gcc/x86_64-suse-linux/15/../../../../include/c++/15/x86_64-suse-linux
/usr/bin/../lib64/gcc/x86_64-suse-linux/15/../../../../include/c++/15/backward
/usr/lib64/clang/17/include
/usr/local/include
/usr/bin/../lib64/gcc/x86_64-suse-linux/15/../../../../x86_64-suse-linux/include
/usr/include
End of search list.
输出中没有 ignoring nonexistent directory 的警告, 表示 clang 已经能成功找到 gcc15 的头文件了.