[Topic DIscussion] gcc版本旧,能自行下载安装新版吗?
Tofloor
poster avatar
linpo
deepin
2023-01-07 06:48
Author

我的deepin 20.8系统的gcc版本是8.3.0:

$ gcc --version
gcc (Uos 8.3.0.3-3+rebuild) 8.3.0

本来我也不关心gcc的版本号,只是我想安装的AMD数学库 AOCL需要gcc 11.2。这个AOCL最新版是4.0的,我能查到最老的AOCL是3.0版的,也需要gcc 10.2版。总之deepin里的gcc版本是太旧了,而AOCL只提供编译好的库,也不提供源代码让咱们编译。

那么问题就是:

  1. 我可以自行下载安装新版的gcc吗?我能用新版gcc替换掉从软件仓库安装的gcc吗?如果不能,新版、旧版gcc能共存吗?
  2. openmpi的那些mpicc之类的脚本,如何设置才能使用新版的gcc?

现在我不敢乱动。请大家帮忙解惑,谢谢!

Reply Favorite View the author
All Replies
shy
deepin
2023-01-07 06:57
#1

不太方便..你可以跑一个gcc版本新的容器

Reply View the author
shy
deepin
2023-01-07 06:58
#2

可以试试手动编译,但我不敢保证绝对能行

我也不推荐手动编译gcc这种程序..

Reply View the author
shy
deepin
2023-01-07 07:00
#3

最简单的方法就是去清华镜像站lxc-image那里找一个gcc比较新的发行版的rootfs

下载解压

sudo chroot /xxx(这是你解压后文件的地方)

然后安装gcc 😂

Reply View the author
神末shenmo
deepin
Spark-App
Q&A Team
2023-01-07 07:51
#4
shy

最简单的方法就是去清华镜像站lxc-image那里找一个gcc比较新的发行版的rootfs

下载解压

sudo chroot /xxx(这是你解压后文件的地方)

然后安装gcc 😂

试试systemd-nspawn

Reply View the author
安洛
deepin
2023-01-07 17:48
#5

新旧gcc可以共存。

楼上说了不少容器的方案。不用容器也可以,你需要自行编译gcc,安装的时候安装位置需要不在path中,或者在path中的优先级低于旧gcc。

然后你只需要在终端中临时修改path变量的值,将新gcc的位置引入并且放在旧gcc的位置前面,就能在终端环境中使用新的gcc,而系统仍然使用旧gcc,不影响正常运行。

Reply View the author
touchzen
deepin
2023-01-07 18:31
#6

我自己编译的gcc 12.2.0, 编译好用sudo make install 安装,用了大概2周了,没有问题,但是这么做会更新libc。

Reply View the author
touchzen
deepin
2023-01-07 18:31
#7

我是用v23 alpha

Reply View the author
linpo
deepin
2023-01-07 21:41
#8
shy

不太方便..你可以跑一个gcc版本新的容器

我不会弄容器啊,只是个普通用户,容器这种高级特性我只是听说过,从来没有折腾过。不过还是谢谢,指了一个方向。

Reply View the author
linpo
deepin
2023-01-07 21:45
#9
安洛

新旧gcc可以共存。

楼上说了不少容器的方案。不用容器也可以,你需要自行编译gcc,安装的时候安装位置需要不在path中,或者在path中的优先级低于旧gcc。

然后你只需要在终端中临时修改path变量的值,将新gcc的位置引入并且放在旧gcc的位置前面,就能在终端环境中使用新的gcc,而系统仍然使用旧gcc,不影响正常运行。

谢谢!我也看了gcc 的安装说明,可以用 --program-suffix, 或者 --program-prefix, 或者 --program-transform-name, 为编译的可执行程序改个名,比如加上个后缀,把 gcc 变成 gcc-12,名字不一样,这样新版本就不会干扰旧版本了。

Reply View the author
linpo
deepin
2023-01-07 21:52
#10
touchzen

我自己编译的gcc 12.2.0, 编译好用sudo make install 安装,用了大概2周了,没有问题,但是这么做会更新libc。

我也试试自己编译 gcc 12,正在 make。我想再请教一下,怎么设置 mpicc, mpifort 之类的脚本,让它们调用新版的 gcc 或者 gfortran, 而不是老版的?

现在我用 mpifort --showme 命令看到的消息是:
$ mpifort --showme

gfortran -I/usr/lib/x86_64-linux-gnu/openmpi/include -pthread -I/usr/lib/x86_64-linux-gnu/openmpi/lib -Wl,--enable-new-dtags -L/usr/lib/x86_64-linux-gnu/openmpi/lib -lmpi_usempif08 -lmpi_usempi_ignore_tkr -lmpi_mpifh -lmpi

就是想把其中的 gfortran 改为 gfortran-12 ,不知道怎么改。

Reply View the author
linpo
deepin
2023-01-07 21:56
#11
神末shenmo

试试systemd-nspawn

我只查到软件仓库里的 systemd-container 提供 systemd-nspawn, 还得学学这个怎么用,感觉像是虚拟机。

Reply View the author
linpo
deepin
2023-01-07 22:08
#12
shy

最简单的方法就是去清华镜像站lxc-image那里找一个gcc比较新的发行版的rootfs

下载解压

sudo chroot /xxx(这是你解压后文件的地方)

然后安装gcc 😂

我查了 archlinux 的,gcc 版本是12.2.0 的。debian 更新的太慢了,连带着 deepin 的软件包一个个的也很老。

Reply View the author
神末shenmo
deepin
Spark-App
Q&A Team
2023-01-07 22:42
#13
linpo

我只查到软件仓库里的 systemd-container 提供 systemd-nspawn, 还得学学这个怎么用,感觉像是虚拟机。

-D就是chroot了

如果-bD就是模拟启动

Reply View the author
SamLukeYes
deepin
2023-01-08 01:06
#14
linpo

我不会弄容器啊,只是个普通用户,容器这种高级特性我只是听说过,从来没有折腾过。不过还是谢谢,指了一个方向。

其实可以简简单单装个 nix,配置 bfsu 镜像nix-shell -p gcc 就能在当前 shell 用 gcc 11 了。用其他 gcc 版本可能稍微麻烦一点,不能简单地用 nix-shell -p,需要在你的工作目录写一个 shell.nix,但有一个比较新的 gcc 可能对于你来说就足够了。

Reply View the author
ljq790615
deepin
2023-01-08 05:16
#15

源代码编译安装,默认位置 /usr/local,就可以了。

Reply View the author