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

openSUSE变更默认编译器

Debian很稳定,但是必须要添加unstable源才能安装一些需要更新的软件,比如说稳定版的firefox是ESR版的,必须要从unstable源才能安装新版。但是unstable源是把所有的软件包都放在里面,操作过程中一旦不小心把核心组件更新到unstable版,那就会带来严重的问题。

Arch系很新,也就意味着稳定性差一些。

openSUSE Leap更加稳定,但是自带的软件包版本过低。不过有OBS(openSUSE build service)支持的第三方源,可以通过第三方源安装更新的版本。比如说Leap 15.6自带的firefox是ESR版的,但是可以通过第三方源安装最新版的从而让机器上有最新版本的firefox用,而第三方源的内容通常受到严格的限制,比如说firefox源就只有firefox相关内容,不会在更新的时候影响到系统的核心组件。这样就可以在稳定的系统上运行较新的软件。

因为最近需要使用高版本的gcc,所以使用了第三方源把Leap 15.6上的gcc-7.5更新到了gcc-13.3。实际上openSUSE的处理方法不是把旧的gcc删除,然后替换为新版的;而是在系统里安装了两个gcc,分别是7.5和13.3版。通过

gcc-7

可以使用7.5版本的gcc

通过

gcc-13

可以使用13.3版本的gcc

在使用zypper安装gcc的时候,系统会自动安装cpp、gcc、gcc-c++、gcc-fortran、gcc-info这么几个包

这几个包会在系统内添加/usr/bin/c++、/usr/bin/gcc、/usr/bin/g++、 /usr/bin/gfortran这么几个软连接指向默认的gcc编译器可执行文件,默认情况下就是7.5版。

openSUSE提供了alternatives系统,可以切换默认的一些程序,比如说ruby、Python的默认程序,这些都是openSUSE内置的alternatives。但是gcc不在默认清单里,而是需要手动添加。

Changing Default Compiler on OpenSuSE – Logikal Blog

通过以下命令可以添加gcc到alternatives

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 50

--install是一般命令参数

接下来的/usr/bin/gcc是软链接,而系统默认的gcc就是这个/usr/bin/gcc

gcc是alternatives里面注册的可替换项的名字

/usr/bin/gcc-13是软链接实际指向的目标

50是优先级

这样就把从第三方源安装的gcc-13所对应的可执行文件/usr/bin/gcc-13注册到alternatives的gcc项中,优先级为50,而这个gcc项在实际的系统中指的是/usr/bin/gcc

执行后,会提示

using /usr/bin/gcc-13 to provide /usr/bin/gcc (gcc) in auto mode

然后

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 20

这样就把系统默认的gcc-7.5所对应的可执行文件/usr/bin/gcc-7注册到alternatives的gcc项中,优先级为20

然后使用命令

update-alternatives --config gcc

按照提示选取,就可以改变/usr/bin/gcc这个软链接的指向,从而改变了系统默认的gcc

类似的可以把cpp、gfortran、g++都注册好

# 有时候探测系统默认c编译器的时候,不仅仅探测gcc,还会探测cc
update-alternatives --install /usr/bin/cc cc /usr/bin/gcc-13 50
update-alternatives --install /usr/bin/cc cc /usr/bin/gcc-7 20
update-alternatives --config cc
# 注册c pre processor
update-alternatives --install /usr/bin/cpp cpp /usr/bin/cpp-13 50
update-alternatives --install /usr/bin/cpp cpp /usr/bin/cpp-7 20
update-alternatives --config cpp
# 有时候探测系统默认c++编译器的时候,除了探测g++,还可能会探测c++
# 所以要注册两个
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 50
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 20
update-alternatives --config g++
update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++-13 50
update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++-7 20
update-alternatives --config c++
# 注册gfortran
update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-13 50
update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-7 20
update-alternatives --config gfortran

如果一个程序在编译过程中要用到多种编译器,比如gcc和g++,那么一定要调整为同一版本,不同版本的编译器编译出来的二进制文件在链接的时候可能会出问题。

通过update-alternatives调整了系统默认编译器后,对于大多数程序,在使用编译器时,如果需要调用配套的ar、ld程序时,一般会在编译脚本里通过编译器的输出信息来选择对应的程序

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 微信小程序项目开发【从0到1~入门篇】
  • Codigger 携手 Jupyter:革新数据科学与编程体验
  • 直播电商系统卷轴模式源码开发的发展前景
  • GitHub每日最火火火项目(9.11)
  • 网络药理学:分子对接之二:PDB数据库的使用(已知PDB ID)、PubChem数据库如果没有3D结构
  • GAMES104:14 引擎工具链高级概念与应用-学习笔记
  • 2024软件测试必问的常见面试题1000问!
  • LINQ 和 LINQ扩展方法 (1)
  • web杂项
  • 智慧平台赋能政务管理,声通科技助力政务管理智能化
  • 逆向基础一阶段检测-1
  • 等待唤醒机制和阻塞队列
  • Java List转Map
  • 【C++ Primer Plus习题】15.2
  • 如何使用树莓派构建 LoRa 网关?
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • JavaScript-Array类型
  • JavaScript对象详解
  • js学习笔记
  • linux学习笔记
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • underscore源码剖析之整体架构
  • 大主子表关联的性能优化方法
  • 仿天猫超市收藏抛物线动画工具库
  • 给初学者:JavaScript 中数组操作注意点
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 深度解析利用ES6进行Promise封装总结
  • 学习使用ExpressJS 4.0中的新Router
  • 用element的upload组件实现多图片上传和压缩
  • 中文输入法与React文本输入框的问题与解决方案
  • ​ArcGIS Pro 如何批量删除字段
  • ## 1.3.Git命令
  • #git 撤消对文件的更改
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (7)svelte 教程: Props(属性)
  • (C语言)字符分类函数
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)linux 命令大全
  • (转)nsfocus-绿盟科技笔试题目
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .net(C#)中String.Format如何使用
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NET大文件上传知识整理
  • .NET和.COM和.CN域名区别
  • .Net面试题4
  • /*在DataTable中更新、删除数据*/