当前位置: 首页 > news >正文

ROS云课三分钟-cmake gcc g++ 默认版本和升级-250523

 2022古旧版:蓝桥ROS之 cmake gcc g++ 默认版本和升级_gcc ros-CSDN博客


版本查看

shiyanlou:~/ $ cmake --version                                        [8:46:04]
cmake version 3.5.1

CMake suite maintained and supported by Kitware (kitware.com/cmake).
shiyanlou:~/ $ gcc --version                                          [8:46:13]
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609
Copyright (C) 2015 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.

shiyanlou:~/ $ g++ --version                                          [8:46:28]
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609
Copyright (C) 2015 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.

shiyanlou:~/ $                                                        [8:46:37]

古旧到离谱…… 

本文介绍了在Ubuntu系统中查看和升级CMake、GCC、G++版本的过程。首先,通过命令行查看当前CMake、GCC、G++的版本,发现版本较旧。接着,使用清华镜像源升级pip和CMake,成功将CMake升级到3.28.4。然后,尝试通过添加PPA源和手动安装的方式升级GCC和G++到7版本,但由于依赖问题未能成功。文章提供了多种解决方案,包括修复依赖、添加旧版源、手动编译安装GCC-7以及使用Docker容器。最后,建议在可能的情况下升级代码或使用更高版本的GCC。


更新

sudo pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pipsudo pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple cmake

pip太旧了……

sudo pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip

然后才能升级cmake 

sudo pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple cmake

Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting cmakeDownloading https://pypi.tuna.tsinghua.edu.cn/packages/2f/a1/aed90f63609db7af7bbd9a6ad8bcc28b710ed58db3ebf0e7c92ce1d04f26/cmake-3.28.4-py2.py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (26.3 MB)|████████████████████████████████| 26.3 MB 1.2 MB/s 
Installing collected packages: cmake
Successfully installed cmake-3.28.4shiyanlou:~/ $ cmake --version                                        [8:55:34]
cmake version 3.28.4CMake suite maintained and supported by Kitware (kitware.com/cmake).

 


gcc和g++

sudo add-apt-repository ppa:ubuntu-toolchain-r/test

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update

然后可以看到也就到7版本。

sudo apt install gcc-7 g++-7

gcc/g++ 5.4 版本对 C++ 标准的支持情况如下:

  1. 对 C++11 的支持:gcc/g++ 5.4 版本在编译时需显式添加 -std=c++11 或 -std=c++0x 选项才能支持 C++11 标准。默认情况下,该版本可能不会自动启用 C++11 支持,但通过编译选项可以激活。

  2. 对 C++14 的支持:gcc/g++ 5.4 版本对 C++14 的支持不完全,部分 C++14 特性可能无法使用。尽管可以通过 -std=c++14 选项尝试启用,但某些高级特性可能无法正常工作。

  3. 默认支持的标准:gcc/g++ 5.4 版本默认支持 C++98 标准。若需使用更新的 C++ 标准,必须通过编译选项显式指定。

但是依赖问题导致无法安装,哈哈哈,我配置的镜像被运维方改得面目全非啊。哇咔咔。

我能怎么办,我也很无奈。

默认是5版。

 


这个错误表明系统无法安装 gcc-7 和 g++-7,因为所需的依赖包(如 libisl19 和 libmpfr6)在当前软件源中不可用或存在版本冲突。以下是解决方案:


1. 检查系统版本

首先确认你的 Ubuntu 版本:

 

bash

lsb_release -a
  • Ubuntu 18.04 (Bionic)gcc-7 和 g++-7 是官方源支持的版本。
  • Ubuntu 20.04/22.04:默认不提供 gcc-7,需手动添加旧版源或编译安装。

2. 解决方案

方案一:为 Ubuntu 18.04 修复依赖

如果系统是 Ubuntu 18.04,尝试以下步骤:

  1. 更新软件源

     

    bash

    sudo apt update
  2. 安装依赖包

     

    bash

    sudo apt install libisl19 libmpfr6
  3. 重新安装 gcc-7 和 g++-7

     

    bash

    sudo apt install gcc-7 g++-7

方案二:为 Ubuntu 20.04/22.04 添加旧版源

如果系统是 Ubuntu 20.04/22.04,需手动添加 Ubuntu 18.04 的源(不推荐长期使用):

  1. 添加 Ubuntu 18.04 源

     

    bash

    echo "deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/bionic.list
    sudo apt update
  2. 安装 gcc-7 和 g++-7

     

    bash

    sudo apt install gcc-7 g++-7
  3. (可选)恢复默认源
    安装完成后,建议删除 /etc/apt/sources.list.d/bionic.list 并更新:

     

    bash

    sudo rm /etc/apt/sources.list.d/bionic.list
    sudo apt update

方案三:手动编译安装 GCC-7

如果上述方法无效,可以手动编译安装:

  1. 安装编译依赖

     

    bash

    sudo apt install build-essential wget bzip2
  2. 下载 GCC-7 源码

     

    bash

    wget https://ftp.gnu.org/gnu/gcc/gcc-7.5.0/gcc-7.5.0.tar.gz
    tar -xvf gcc-7.5.0.tar.gz
    cd gcc-7.5.0
  3. 配置并编译

     

    bash

    ./contrib/download_prerequisites
    mkdir build && cd build
    ../configure --prefix=/usr/local/gcc-7 --disable-multilib --enable-languages=c,c++
    make -j$(nproc)
    sudo make install
  4. 设置环境变量

     

    bash

    echo "export PATH=/usr/local/gcc-7/bin:$PATH" >> ~/.bashrc
    echo "export LD_LIBRARY_PATH=/usr/local/gcc-7/lib64:$LD_LIBRARY_PATH" >> ~/.bashrc
    source ~/.bashrc

方案四:使用 Docker 容器

如果仅需临时使用 GCC-7,可以通过 Docker 运行 Ubuntu 18.04 容器:

 

bash

docker run -it ubuntu:18.04

在容器内安装 gcc-7

 

bash

apt update && apt install gcc-7 g++-7 -y

3. 验证安装

安装完成后,检查版本:

 

bash

gcc-7 --version
g++-7 --version

注意事项

  • 兼容性问题:GCC-7 是较旧版本,可能与新系统库存在兼容性问题。
  • 推荐替代方案:如果可能,建议升级代码或使用更高版本的 GCC(如 GCC-9/GCC-11)。

希望以上方法能解决问题!

在Ubuntu 16.04上直接安装g++ 10可能存在依赖问题,因为Ubuntu 16.04的官方源中默认不包含g++ 10,但可通过以下方法实现:

安装方法

  1. 添加PPA源
    使用ubuntu-toolchain-r/test PPA源获取更新的GCC/g++版本:

     

    bash

    sudo add-apt-repository ppa:ubuntu-toolchain-r/test
    sudo apt update
  2. 安装g++ 10
    安装g++ 10及其依赖项:

     

    bash

    sudo apt install g++-10 gcc-10
  3. 多版本管理(可选)
    使用update-alternatives工具管理多个g++版本:

     

    bash

    sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 100
    sudo update-alternatives --config g++

注意事项

  • 依赖问题:Ubuntu 16.04的默认库版本较旧,可能导致g++ 10安装时出现依赖冲突。可尝试先升级系统关键库或使用--fix-missing参数解决部分依赖问题。
  • 源兼容性ubuntu-toolchain-r/test PPA可能不包含所有版本的GCC/g++,若安装失败,可尝试从第三方源(如Launchpad个人PPA)获取。
  • 系统兼容性:Ubuntu 16.04已结束标准支持(EOL),建议升级到更新的长期支持版本(如Ubuntu 20.04/22.04)以获得更好的兼容性。

替代方案

  • 容器化开发:使用Docker运行包含g++ 10的环境,避免污染宿主机系统:
     

    bash

    docker run -it ubuntu:20.04 bash
    # 在容器内安装g++ 10
  • 源码编译:从GNU官网下载g++ 10源码并手动编译安装,但需自行解决所有依赖。
http://www.xdnf.cn/news/608095.html

相关文章:

  • 前后端联调实战指南:Axios拦截器、CORS与JWT身份验证全解析
  • 提示词工程框架——CO-STAR 框架实战
  • 江科大DMA直接存储器访问hal库实现
  • 深度剖析 MCP SDK 最新版:Streamable HTTP 模式
  • 学习黑客Nmap 是什么?
  • 数据结构 -- 交换排序(冒泡排序和快速排序)
  • 信息安全管理与评估赛项参考答案-模块1网络平台搭建
  • 【软件测试】第三章·软件测试基本方法(基于需求的测试方法)
  • Trae+12306 MCP,10分钟搭建行程可视化助手
  • Gmsh 代码深度解析与应用实例
  • 【开源项目1】基于机器学习木马查杀引擎项目
  • 1.3 线性系统的时域分析法
  • kafka速度快的原理
  • 【时时三省】(C语言基础)对被调用函数的声明和函数原型
  • [Datagear] [SQL]实现分组统计同时带汇总行的两种方式对比分析
  • AI架构师的新工具箱:ChatGPT、Copilot、AutoML、模型服务平台
  • NtfsLookupAttributeByName函数分析之和Scb->AttributeName的关系
  • vim快速移动光标
  • 多路径传输(比如 MPTCP)控制实时突发
  • 动态规划经典三题_完全平方数
  • JFace中MVC的表格使用介绍
  • C++高效求解非线性方程组的实践指南
  • Ubuntu 18.04 升级内核到 5.X(< 5.10)
  • 【YOLOs-CPP-图像分类部署】03-解决报错
  • LSNet:以小见大,CVPR2025全新轻量级主干网络
  • Node.js 库大全
  • 怎么判断一个Android APP使用了KMM这个跨端框架
  • AI是否会取代人类?浔川问答①
  • 怎么判断一个Android APP使用了Tauri 这个跨端框架
  • css 里面写if else 条件判断