You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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:

  1. 若容器未注册,先完成系统注册:
    SUSEConnect -r <你的注册码> -e <邮箱>
    
  2. 启用Development Tools模块:
    SUSEConnect -p sle-module-development-tools/15.2/x86_64
    
  3. 安装GCC 10+版本(以GCC10为例):
    zypper install gcc10 gcc10-c++
    
  4. 设置默认GCC版本:
    update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc10 100
    update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++10 100
    
  5. 验证版本:
    gcc --version
    g++ --version
    

方法2:手动编译安装指定版本(如GCC13.2.0)

如果需要特定版本的GCC,可从源码编译:

  1. 安装编译依赖:
    zypper install wget tar bzip2 gcc gcc-c++ make gmp-devel mpfr-devel libmpc-devel
    
  2. 下载并解压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
    
  3. 配置编译参数(指定安装路径为/usr/local/gcc13):
    ./configure --prefix=/usr/local/gcc13 --enable-languages=c,c++ --disable-multilib
    
  4. 编译并安装(编译耗时较长,建议用-j$(nproc)利用多核心):
    make -j$(nproc)
    make install
    
  5. 更新环境变量,让新版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
    
  6. 验证版本:
    gcc --version
    g++ --version
    

修复Homebrew安装后PATH不生效的问题

如果之前用Homebrew安装了新版GCC但未生效,需确保Homebrew的bin目录在PATH最前端:

  1. 修改.bashrc添加Homebrew路径:
    echo 'export PATH=/home/linuxbrew/.linuxbrew/bin:$PATH' >> ~/.bashrc
    source ~/.bashrc
    
  2. 验证:
    which gcc
    gcc --version
    

编译注意事项

升级GCC后,编译程序时需指定C++17标准:

g++ -std=c++17 hello.cpp -o hello

(注:GCC9及以上版本无需额外链接-lstdc++fs,低于9版本则需要添加该参数)

内容的提问来源于stack exchange,提问作者CHINMAY ANAND.S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 14:47:09