如何在SUSE SLES15 SP2开发容器中升级GCC以支持C++17 filesystem库
在SUSE SLES15 SP2容器中升级GCC以支持C++17 std::filesystem
问题背景
我在VS Code连接的SUSE SLES15 SP2开发容器(镜像:registry.suse.com/suse/sle15:15.2)中,编译使用C++17标准库std::filesystem的程序时,出现头文件找不到的错误。当前容器内GCC版本为7.5.0,该版本不支持正式版std::filesystem(且不想使用experimental/filesystem)。尝试过zypper update无法升级GCC,用Homebrew安装新版GCC后修改.bashrc的PATH,系统仍指向旧版本7.5.0。需要将GCC升级至可支持该库的版本(如13.2.0)。
程序代码
#include <iostream> #include <filesystem> int main() { // Print "Hello, World!" std::cout << "Hello, World!" << std::endl; // Example filesystem operations std::filesystem::path currentPath = std::filesystem::current_path(); std::cout << "Current path: " << currentPath << std::endl; return 0; }
编译报错信息
/home/developer/workspace/rough # g++ hello.cpp hello.cpp:2:10: fatal error: filesystem: No such file or directory #include <filesystem> ^~~~~~~~~~~~ compilation terminated.
当前GCC版本信息
/home/developer/workspace/rough # gcc --version gcc (SUSE Linux) 7.5.0 Copyright (C) 2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
解决方案
方法1:使用SUSE官方开发工具模块(推荐)
SLES15 SP2可通过启用官方模块获取稳定的高版本GCC:
- 若容器未注册,先完成系统注册:
SUSEConnect -r <你的注册码> -e <邮箱> - 启用
Development Tools模块:SUSEConnect -p sle-module-development-tools/15.2/x86_64 - 安装GCC 10+版本(以GCC10为例):
zypper install gcc10 gcc10-c++ - 设置默认GCC版本:
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc10 100 update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++10 100 - 验证版本:
gcc --version g++ --version
方法2:手动编译安装指定版本(如GCC13.2.0)
如果需要特定版本的GCC,可从源码编译:
- 安装编译依赖:
zypper install wget tar bzip2 gcc gcc-c++ make gmp-devel mpfr-devel libmpc-devel - 下载并解压GCC13.2.0源码:
wget https://ftp.gnu.org/gnu/gcc/gcc-13.2.0/gcc-13.2.0.tar.gz tar xzf gcc-13.2.0.tar.gz cd gcc-13.2.0 - 配置编译参数(指定安装路径为
/usr/local/gcc13):./configure --prefix=/usr/local/gcc13 --enable-languages=c,c++ --disable-multilib - 编译并安装(编译耗时较长,建议用
-j$(nproc)利用多核心):make -j$(nproc) make install - 更新环境变量,让新版GCC优先:
echo 'export PATH=/usr/local/gcc13/bin:$PATH' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=/usr/local/gcc13/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc - 验证版本:
gcc --version g++ --version
修复Homebrew安装后PATH不生效的问题
如果之前用Homebrew安装了新版GCC但未生效,需确保Homebrew的bin目录在PATH最前端:
- 修改
.bashrc添加Homebrew路径:echo 'export PATH=/home/linuxbrew/.linuxbrew/bin:$PATH' >> ~/.bashrc source ~/.bashrc - 验证:
which gcc gcc --version
编译注意事项
升级GCC后,编译程序时需指定C++17标准:
g++ -std=c++17 hello.cpp -o hello
(注:GCC9及以上版本无需额外链接-lstdc++fs,低于9版本则需要添加该参数)
内容的提问来源于stack exchange,提问作者CHINMAY ANAND.S
相关产品推荐
相关产品推荐

