【系统软件03】centos7安装和使用node-v18.16.0(centos7升级glibc 2.28)

news2024/12/22 20:41:55

【系统软件03】centos7安装和使用node-v18.16.0(centos7升级glibc 2.28)

  • 前言:本文是解决node 18.16.0的依赖问题,具体的node安装流程,可以参考我的另外一篇文章。
  • 一、下载node v18.16.0
  • 二、下载glibc2.28(建议使用第二个,第一个很慢的)
  • 二、升级glibc2.28前置条件
  • 三、查看本机的gcc版本、make版本
  • 四、升级gcc4.9
    • 1、源码编译安装——(不建议使用)
    • 2、devtoolset安装升级gcc4.9:(不建议使用)
      • 2.1、devtoolset在线安装
      • 2.1、devtoolset离线下载、安装
    • 3、gcc 7.3(建议)
  • 五、升级make4.1.0
  • 六、现在可以安装glibc了
  • 七、安装glibc可能会遇到的问题
    • 问题0:重新启动后,发现右击桌面,打不开terminal了
    • 问题一:Centos 7 升级 Glibc-2.28,报错,
    • 问题二、cannot access /var/lib/alternatives/gcc: No such file or directory
    • 问题三、我usr/bin/gcc还存在着4.8版本,

前言:本文是解决node 18.16.0的依赖问题,具体的node安装流程,可以参考我的另外一篇文章。

linux环境下安装nodejs和npm的两个方法

一、下载node v18.16.0

  • 下载地址:https://nodejs.org/dist/
  • https://nodejs.org/en/download/releases
    在这里插入图片描述
  • 解压,查看node版本号

[dev1@localhost bin]$ ./node -v
./node: /lib64/libm.so.6: version GLIBC_2.27' not found (required by ./node) ./node: /lib64/libc.so.6: version GLIBC_2.25’ not found (required by ./node)
./node: /lib64/libc.so.6: version GLIBC_2.28' not found (required by ./node) ./node: /lib64/libstdc++.so.6: version CXXABI_1.3.9’ not found (required by ./node)
./node: /lib64/libstdc++.so.6: version GLIBCXX_3.4.20' not found (required by ./node) ./node: /lib64/libstdc++.so.6: version GLIBCXX_3.4.21’ not found (required by ./node)

在这里插入图片描述

  • 错误原因
    查看本机GLIBC版本

strings /lib64/libc.so.6 |grep GLIBC

[dev1@localhost bin]$ strings /lib64/libc.so.6 |grep GLIBC
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_PRIVATE
___sys_nerr_GLIBC_2_3
___sys_nerr_GLIBC_2_4
___sys_nerr_GLIBC_2_1
___sys_errlist_GLIBC_2_1
___sys_errlist_GLIBC_2_4
___sys_errlist_GLIBC_2_3
_IO_file_seekoff@@GLIBC_2.2.5
getservent_r@@GLIBC_2.2.5
_sys_siglist@@GLIBC_2.3.3
_dl_starting_up@@GLIBC_PRIVATE
tmpfile@@GLIBC_2.2.5
sched_getaffinity@GLIBC_2.3.3
pthread_cond_wait@GLIBC_2.2.5
regexec@GLIBC_2.2.5
memcpy@@GLIBC_2.14
_IO_file_init@@GLIBC_2.2.5
realpath@GLIBC_2.2.5
realpath@@GLIBC_2.3
__ctype32_tolower@GLIBC_2.2.5
gethostbyname2_r@@GLIBC_2.2.5
getaliasbyname_r@@GLIBC_2.2.5
_IO_file_overflow@@GLIBC_2.2.5
pthread_cond_wait@@GLIBC_2.3.2
getprotoent_r@@GLIBC_2.2.5
regexec@@GLIBC_2.3.4
_rtld_global@@GLIBC_PRIVATE
getgrgid_r@@GLIBC_2.2.5
pthread_cond_init@GLIBC_2.2.5
_IO_fsetpos@@GLIBC_2.2.5
GLIBC_2.8
_IO_proc_close@@GLIBC_2.2.5
_sys_nerr@@GLIBC_2.12
pthread_cond_timedwait@@GLIBC_2.3.2
__libc_enable_secure@@GLIBC_PRIVATE
pclose@@GLIBC_2.2.5
getaliasent_r@@GLIBC_2.2.5
__tls_get_addr@@GLIBC_2.3
_sys_nerr@GLIBC_2.4
sys_sigabbrev@GLIBC_2.2.5
pthread_cond_broadcast@GLIBC_2.2.5
_IO_proc_open@@GLIBC_2.2.5
posix_spawn@@GLIBC_2.15
getpwnam_r@@GLIBC_2.2.5
_rtld_global_ro@@GLIBC_PRIVATE
getrpcbyname_r@@GLIBC_2.2.5
pthread_cond_broadcast@@GLIBC_2.3.2
nftw64@GLIBC_2.2.5
_sys_siglist@GLIBC_2.2.5
_sys_nerr@GLIBC_2.3
_IO_fsetpos64@@GLIBC_2.2.5
__ctype_tolower@GLIBC_2.2.5
__ctype_toupper@GLIBC_2.2.5
_IO_file_underflow@@GLIBC_2.2.5
localeconv@@GLIBC_2.2.5
pthread_cond_timedwait@GLIBC_2.2.5
_IO_file_fopen@@GLIBC_2.2.5
__ctype_b@GLIBC_2.2.5
GLIBC_2.5
_IO_file_finish@@GLIBC_2.2.5
GLIBC_2.9
getgrnam_r@@GLIBC_2.2.5
GLIBC_2.7
GLIBC_2.6
getservbyname_r@@GLIBC_2.2.5
__ctype32_b@GLIBC_2.2.5
_res@GLIBC_2.2.5
__secure_getenv@GLIBC_2.2.5
getnetent_r@@GLIBC_2.2.5
nftw@GLIBC_2.2.5
getpwuid_r@@GLIBC_2.2.5
_IO_fdopen@@GLIBC_2.2.5
posix_spawn@GLIBC_2.2.5
gethostbyaddr_r@@GLIBC_2.2.5
_IO_file_xsputn@@GLIBC_2.2.5
pthread_attr_init@@GLIBC_2.2.5
getrpcbynumber_r@@GLIBC_2.2.5
_IO_fopen@@GLIBC_2.2.5
getnetbyname_r@@GLIBC_2.2.5
memcpy@GLIBC_2.2.5
pthread_cond_signal@@GLIBC_2.3.2
pthread_cond_signal@GLIBC_2.2.5
sys_sigabbrev@@GLIBC_2.3.3
_IO_fgetpos@@GLIBC_2.2.5
posix_spawnp@@GLIBC_2.15
_IO_file_setbuf@@GLIBC_2.2.5
getservbyport_r@@GLIBC_2.2.5
_sys_errlist@GLIBC_2.3
_IO_file_attach@@GLIBC_2.2.5
gethostent_r@@GLIBC_2.2.5
_sys_errlist@GLIBC_2.4
_sys_nerr@GLIBC_2.2.5
nftw64@@GLIBC_2.3.3
_IO_fgetpos64@@GLIBC_2.2.5
__res_maybe_init@GLIBC_PRIVATE
fnmatch@@GLIBC_2.2.5
h_errno@GLIBC_PRIVATE
_sys_errlist@@GLIBC_2.12
_IO_fclose@@GLIBC_2.2.5
gethostbyname_r@@GLIBC_2.2.5
_IO_do_write@@GLIBC_2.2.5
getspent_r@@GLIBC_2.2.5
getpwent_r@@GLIBC_2.2.5
pthread_cond_destroy@GLIBC_2.2.5
sched_setaffinity@GLIBC_2.3.3
getspnam_r@@GLIBC_2.2.5
sched_setaffinity@@GLIBC_2.3.4
_IO_popen@@GLIBC_2.2.5
getgrent_r@@GLIBC_2.2.5
_IO_file_sync@@GLIBC_2.2.5
GLIBC_2.11
GLIBC_2.16
GLIBC_2.10
pthread_cond_init@@GLIBC_2.3.2
GLIBC_2.17
getprotobyname_r@@GLIBC_2.2.5
GLIBC_2.13
getnetbyaddr_r@@GLIBC_2.2.5
_sys_errlist@GLIBC_2.2.5
_IO_file_write@@GLIBC_2.2.5
pthread_cond_destroy@@GLIBC_2.3.2
nftw@@GLIBC_2.3.3
GLIBC_2.2.6
fopencookie@@GLIBC_2.2.5
__ctype32_toupper@GLIBC_2.2.5
sched_getaffinity@@GLIBC_2.3.4
_dl_argv@@GLIBC_PRIVATE
posix_spawnp@GLIBC_2.2.5
getrpcent_r@@GLIBC_2.2.5
getprotobynumber_r@@GLIBC_2.2.5
_IO_file_close_it@@GLIBC_2.2.5
_obstack@GLIBC_2.2.5
[dev1@localhost bin]$ 

可以看到,我们centos7上安装的GLIBC版本是2.2.5,而node所需的GLIBC版本是GLIBC_2.27、GLIBC_2.25、GLIBC_2.28,
所以报错的原因是,glibc版本过低

  • 解决方案:升级glibc

二、下载glibc2.28(建议使用第二个,第一个很慢的)

http://ftp.gnu.org/pub/gnu/glibc/
http://www.gnu.org/software/libc/libc.html
http://mirrors.nju.edu.cn/gnu/libc/
http://ftp.ntu.edu.tw/gnu/glibc/
http://mirrors.syringanetworks.net/gnu/libc/
http://alpha.gnu.org/gnu/glibc/

链接:https://blog.csdn.net/wmzjzwlzs/article/details/127478144

二、升级glibc2.28前置条件

  • 查看升级glibc2.28所需编译器的版本号
    我们查看安装包内的文件INSTALL
  • 显示如下
Recommended Tools for Compilation
=================================

We recommend installing the following GNU tools before attempting to
build the GNU C Library:

   * GNU 'make' 4.0 or newer

     As of relase time, GNU 'make' 4.2.1 is the newest verified to work
     to build the GNU C Library.

   * GCC 4.9 or newer

     GCC 4.9 or higher is required. 
  • 可知,需要make4.0以后的版本,最新验证过的make版本是4.2.1
  • 可知,需要gcc4.9或者更新版本。
    在这里插入图片描述

三、查看本机的gcc版本、make版本

  • gcc-4.8.2
[dev1@localhost build]$ gcc -v
使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
目标:x86_64-redhat-linux
配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
线程模型:posix
gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
[dev1@localhost build]$
  • make
[dev1@localhost build]$ make -v
GNU Make 3.82
Built for x86_64-redhat-linux-gnu
Copyright (C) 2010  Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
[dev1@localhost build]$ 

四、升级gcc4.9

1、源码编译安装——(不建议使用)

  1. 下载 gcc-4.9.0.tar.bz2
 wget https://mirrors.ustc.edu.cn/gnu/gcc/gcc-4.9.0/gcc-4.9.0.tar.bz2
  1. 解压
tar -jxvf gcc-4.9.0.tar.bz2
  1. 进入gcc-4.9.0目录
cd gcc-4.9.0
  1. 下载所需
./contrib/download_prerequisites
  1. 创建build目录、进入build目录
 mkdir build && cd build
  1. configure
../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
../configure --prefix=/usr/local/gcc  --enable-bootstrap  --enable-checking=release --enable-languages=c,c++ --disable-multilib
  1. 编译、安装
 make -j4 && sudo make install
  1. 导出环境变量

[dev1@localhost ~]$ sudo vi /etc/profile.d/gcc.sh
export PATH=/usr/local/gcc/bin:$PATH
[dev1@localhost ~]$ source /etc/profile.d/gcc.sh
[dev1@localhost ~]$ gcc -v
使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/gcc/libexec/gcc/x86_64-unknown-linux-gnu/4.9.0/lto-wrapper
目标:x86_64-unknown-linux-gnu
配置为:../configure --prefix=/usr/local/gcc --enable-bootstrap --enable-checking=release --enable-languages=c,c++ --disable-multilib
线程模型:posix
gcc 版本 4.9.0 (GCC) 
[dev1@localhost ~]$

黑猴子的家:Centos 7.x gcc 4.8.5 升级到 gcc 4.9.4
源码安装GCC-4.9.2

2、devtoolset安装升级gcc4.9:(不建议使用)

2.1、devtoolset在线安装

升级到gcc4.9:

sudo yum update
wget https://copr.fedoraproject.org/coprs/rhscl/devtoolset-3/repo/epel-6/rhscl-devtoolset-3-epel-6.repo -O /etc/yum.repos.d/devtoolset-3.repo  --no-check-certificate
yum -y install devtoolset-3-gcc devtoolset-3-gcc-c++ devtoolset-3-binutils
scl enable devtoolset-3 bash

2.1、devtoolset离线下载、安装

  • 离线下载-devtoolset
sudo yum update
wget https://copr.fedoraproject.org/coprs/rhscl/devtoolset-3/repo/epel-6/rhscl-devtoolset-3-epel-6.repo -O /etc/yum.repos.d/devtoolset-3.repo  --no-check-certificate
sudo yum install  --downloadonly devtoolset-3 --downloaddir=devtoolset-3 --skip-broken
  • 离线安装-devtoolset
cd devtoolset-3
sudo rpm -Uvh --force *.rpm

如果报错:

错误:依赖检测失败:libqudamath = 4.8.5 - 39.el7 被 (已安装) libgfortran - 4.8.5 - 39.el7.x86_64

下面的解决方案不建议使用,因为可能会引起:重启系统失败。所以,建议的解决方案是——使用离线安装的centos系统制作离线版本的devtoolset,然后再拷贝到局域网安装。

原因和解决方案

这个错误表示,在安装某个软件包时,Yum 检测到系统中已经存在 libgfortran,但它的版本与所需版本不匹配。

具体来说,安装程序需要的是 libqudamath 4.8.5-39.el7,但系统中已经安装的 libgfortran 是 4.8.5-39.el7.x86_64,因此无法满足依赖关系。

为了解决这个问题,可以按以下步骤操作:

卸载已安装的 libgfortran。
首先需要卸载系统中已经安装的 libgfortran。使用以下命令可以查看已安装的 libgfortran 版本:

rpm -qa | grep libgfortran
然后使用以下命令卸载指定版本的 libgfortran:

sudo rpm -e --nodeps libgfortran-4.8.5-39.el7.x86_64
其中,--nodeps 选项表示忽略依赖关系检查,强制删除软件包。这里需要将命令中的版本号替换为实际安装的版本。
  • 使用devtoolset

临时使用

scl enable devtoolset-3 bash

或者

source /opt/rh/devtoolset-3/enable

当前账户永久使用
~/.profile文件假如以下内容

source /opt/rh/devtoolset-3/enable

所有账户永久使用
打开/etc/profile.d/devtoolset.sh 文件:
把以下内容加入文件

source /opt/rh/devtoolset-3/enable

其他版本参靠为CentOS 6、7升级gcc至4.8、4.9、5.2、6.3、7.3等高版本

升级到gcc 7.3:
yum -y install centos-release-scl
yum -y install devtoolset-7-gcc devtoolset-7-gcc-c++ devtoolset-7-binutils
scl enable devtoolset-7 bash
需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。
如果要长期使用gcc 7.3的话:

echo "source /opt/rh/devtoolset-7/enable" >>/etc/profile
升级到gcc 8.3:
yum -y install centos-release-scl
yum -y install devtoolset-8-gcc devtoolset-8-gcc-c++ devtoolset-8-binutils
scl enable devtoolset-8 bash
需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。
如果要长期使用gcc 8.3的话:

echo "source /opt/rh/devtoolset-8/enable" >>/etc/profile
升级到gcc 9.3:
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。
如果要长期使用gcc 9.3的话:

echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
 

再说一下已经停止支持的devtoolset4(gcc 5.2)及之前版本的安装方法

升级到gcc 4.8wget http://people.centos.org/tru/devtools-2/devtools-2.repo -O /etc/yum.repos.d/devtoolset-2.repo
yum -y install devtoolset-2-gcc devtoolset-2-gcc-c++ devtoolset-2-binutils
scl enable devtoolset-2 bash
升级到gcc4.9:
wget https://copr.fedoraproject.org/coprs/rhscl/devtoolset-3/repo/epel-6/rhscl-devtoolset-3-epel-6.repo -O /etc/yum.repos.d/devtoolset-3.repo
yum -y install devtoolset-3-gcc devtoolset-3-gcc-c++ devtoolset-3-binutils
scl enable devtoolset-3 bash
升级到gcc 5.2
wget https://copr.fedoraproject.org/coprs/hhorak/devtoolset-4-rebuild-bootstrap/repo/epel-6/hhorak-devtoolset-4-rebuild-bootstrap-epel-6.repo -O /etc/yum.repos.d/devtoolset-4.repo
yum install devtoolset-4-gcc devtoolset-4-gcc-c++ devtoolset-4-binutils -y
scl enable devtoolset-4 bash
升级完成后一定要运行:gcc --version 看一下版本号变成升级后的gcc版本才算升级成功。

3、gcc 7.3(建议)

gcc73之前的,在某些系统上,安装处理依赖会有些问题,所以建议从7.3开始使用。(一般高版本的对低版本的会做兼容处理,如果你真的一定要4.9,建议前面两种方法,但是中间可能会有相关问题,且源码编译的时间特别长)

升级到gcc 7.3:
yum -y install centos-release-scl
yum -y install devtoolset-7-gcc devtoolset-7-gcc-c++ devtoolset-7-binutils
scl enable devtoolset-7 bash
需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。
如果要长期使用gcc 7.3的话:

echo "source /opt/rh/devtoolset-7/enable" >>/etc/profile

重启后生效

五、升级make4.1.0

    1. 下载、构建、安装
 wget http://mirrors.ustc.edu.cn/gnu/make/make-4.3.tar.gz
$ tar -xzvf make-4.3.tar.gz 
$ cd make-4.3/
# 创建构建目录
mkdir build && cd build
# 安装到指定目录
$ ../configure  --prefix=/usr/local/make
$ make -j4 && sudo make install
# 创建软链接
$ cd /usr/bin/
$ mv make make.bak # backup
$ ln -sv /usr/local/make/bin/make /usr/bin/make
    1. 验证
[dev1@localhost bin]$ make -v
GNU Make 4.2.1
为 x86_64-pc-linux-gnu 编译
Copyright (C) 1988-2016 Free Software Foundation, Inc.
许可证:GPLv3+:GNU 通用公共许可证第 3 版或更新版本<http://gnu.org/licenses/gpl.html>。
本软件是自由软件:您可以自由修改和重新发布它。
在法律允许的范围内没有其他保证。
[dev1@localhost bin]$

Centos 7 升级 Glibc-2.28

六、现在可以安装glibc了

# 在线安装
wget http://mirrors.ustc.edu.cn/gnu/libc/glibc-2.28.tar.gz
# 解压
tar zxf glibc-2.28.tar.gz
cd glibc-2.28
mkdir build
cd build
 ../configure  --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin --disable-sanity-checks --disable-werror
# 这步执行时间依赖你的配置,我的4核虚拟机,大概30多分钟
make -j8
make install
sudo make localedata/install-locales
  • 验证
ls -l /lib/libc.so.6
You should restart this script from your build directory after you've
fixed all problems!
Btw. the script doesn't work if you're installing GNU libc not as your
primary library!
make[1]: *** [Makefile:111: install] Error 1
make[1]: Leaving directory '/home/dev1/下载/glibc-2.28'
make: *** [Makefile:12:install] 错误 2
[root@localhost build]# ls -l /lib64/libc.so.6
lrwxrwxrwx. 1 root root 12 Jun  8 22:45 /lib64/libc.so.6 -> libc-2.28.so
[root@localhost build]# 

在这里插入图片描述

到此就完成了,如果你遇到了其他问题,可以继续往后看,看是否有你需要的。

七、安装glibc可能会遇到的问题

问题0:重新启动后,发现右击桌面,打不开terminal了

原因,你应该是没有进行下面的这行,没安装字符集

sudo make localedata/install-locales
在glibc-2.28/build/目录下执行上面的命令行。

而且,开机还有下面这个问题,其实选择哪个都不行的,只有用上面的命令行安装了字符集,才可以打开 open terminal
在这里插入图片描述

  • 原因,可以查看INSTALL文件

在这里插入图片描述

解决方案:用moba xterm链接,然后执行上面的这行。

问题一:Centos 7 升级 Glibc-2.28,报错,

collect2: error: ld returned 1 exit status ,execution of gcc -B /usr/bin/ failed
在这里插入图片描述

/usr/bin/ld: cannot find -lnss_test2
collect2: error: ld returned 1 exit status
Execution of gcc -B/usr/bin/ failed!
The script has found some problems with your installation!
Please read the FAQ and the README file and check the following:
- Did you change the gcc specs file (necessary after upgrading from
  Linux libc5)?
- Are there any symbolic links of the form libXXX.so to old libraries?
  Links like libm.so -> libm.so.5 (where libm.so.5 is an old library) are wrong,
  libm.so should point to the newly installed glibc file - and there should be
  only one such link (check e.g. /lib and /usr/lib)
You should restart this script from your build directory after you've
fixed all problems!
Btw. the script doesn't work if you're installing GNU libc not as your
primary library!
make[1]: *** [Makefile:111: install] Error 1
make[1]: Leaving directory '/home/dev1/下载/glibc-2.28'
make: *** [Makefile:12: install] Error 2
[root@localhost build]# ls -l /lib/libc.so.6

在 CentOS 7 上升级 Glibc 到 2.28 版本时,如果遇到了 collect2: error: ld returned 1 exit status 错误,并伴随着类似于 “execution of gcc -B /usr/bin/ failed” 的错误消息,可能是由于编译器路径配置不正确导致的。

这个错误通常是由于编译器的路径设置不正确引起的。在升级 Glibc 后,系统中的编译器可能需要重新配置以适应新的 Glibc 版本。

要解决此问题,可以尝试以下步骤:

  1. 检查编译器路径: 确保系统中的编译器路径正确配置。可以使用 which gcc 命令查看当前使用的 gcc 编译器的路径。确保该路径存在且指向正确的位置。

  2. 更新编译器配置: 如果编译器路径不正确,可以尝试更新编译器的配置。可以使用 update-alternatives 命令来配置系统中的默认编译器。例如,使用以下命令将 gcc 编译器设置为默认:

which gcc
sudo update-alternatives --set gcc /usr/bin/gcc-版本号

如果没有带版本号的gcc,则采用如下方案

sudo update-alternatives --set gcc /usr/bin/gcc

将 “版本号” 替换为正确的 gcc 版本号。

  1. 重新编译程序: 如果编译器路径已正确配置,但仍然出现错误,请尝试重新编译您的程序。在重新编译之前,确保更新了相关的头文件和库文件,以适应新的 Glibc 版本。

除了上面这个方案,我还有个想法,就是gcc备份下,然后建立一个软连接,原理上应该是可行的,未验证。
[dev1@localhost bin]$ which gcc
/opt/rh/devtoolset-7/root/usr/bin/gcc
[dev1@localhost bin]$
创建软链接
$ cd /usr/bin/
$ mv gccgcc.bak # backup
$ ln -sv /opt/rh/devtoolset-7/root/usr/bin/gcc /usr/bin/gcc
大家可以尝试下,进行后,继续进行libc的编译和安装。

问题二、cannot access /var/lib/alternatives/gcc: No such file or directory

如果在执行 update-alternatives 命令时出现错误提示 /var/lib/alternatives/gcc: No such file or directory,这通常表示该命令无法找到 gcc 的备用链接。

其实,我的gcc在目录/usr/local/gcc/bin/gcc

如果您的 gcc 安装在 /usr/local/gcc/bin/gcc 路径下,而不是系统默认的 /usr/bin/gcc,您可以按照以下步骤使用 update-alternatives 命令来配置备用链接:

确认 gcc 是否已正确安装:运行以下命令来检查 gcc 是否已安装在系统上:

which gcc
/usr/local/gcc/bin/gcc --version

如果显示 gcc 的版本信息,则表示已正确安装。

设置备用链接:运行以下命令来设置 gcc 的备用链接:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/local/gcc/bin/gcc 10

上述命令将 /usr/local/gcc/bin/gcc 添加到备用链接列表中,并将其优先级设置为 10。您可以根据需要调整优先级的值。

选择默认的 gcc:运行以下命令来选择默认的 gcc:

sudo update-alternatives --config gcc

这会列出所有可用的 gcc 选项,并要求您选择默认的 gcc。输入对应的序号,然后按 Enter 键进行选择。

完成以上步骤后,gcc 的备用链接将被正确配置为 /usr/local/gcc/bin/gcc。您可以再次运行 gcc --version 来验证配置是否生效。

请注意,在使用非默认路径的 gcc 时,确保在编译和构建过程中使用正确的编译器路径。您可能需要相应地更新项目的构建脚本或 Makefile,以指定正确的 gcc 路径。

问题三、我usr/bin/gcc还存在着4.8版本,

[dev1@localhost bin]$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/local/gcc/bin/gcc 1
[sudo] password for dev1: 
failed to link /usr/bin/gcc -> /etc/alternatives/gcc: /usr/bin/gcc exists and it is not a symlink

如果在尝试设置备用链接时出现 /usr/bin/gcc 存在且不是符号链接的错误提示,可能是由于该路径下已存在名为 /usr/bin/gcc 的文件。

要解决此问题,可以尝试以下方法:

备份并删除现有文件: 首先,将现有的 /usr/bin/gcc 文件备份到其他位置,然后删除它。可以使用以下命令完成:

sudo mv /usr/bin/gcc /usr/bin/gcc_backup
sudo rm /usr/bin/gcc

重新设置备用链接: 重新运行设置备用链接的命令,确保备用链接指向正确的 gcc 可执行文件:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/local/gcc/bin/gcc 10

选择默认 gcc: 运行以下命令来选择默认的 gcc:

sudo update-alternatives --config gcc

然后,从可用的选项中选择正确的 gcc,并按 Enter 键进行确认。

完成上述步骤后,应该能够重新设置备用链接并成功使用新版本的 gcc。

如果问题仍然存在,可能涉及其他配置或系统设置问题。建议您咨询 CentOS 社区或寻求专业的系统管理员支持,以获得更具体的帮助和指导。

http://192.168.4.77:8899/c/4a4a4981-bcbf-4333-b79a-c00c1c5048dc

/usr/bin/gcc has not been configured as an alternative for gcc

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/874298.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何轻松注册企业邮箱?快速掌握超简单的注册技巧!

随着互联网的发展&#xff0c;越来越多的企业开始使用电子邮件作为通信工具。企业邮箱不仅可以提高企业的工作效率&#xff0c;还可以使企业通信更加便捷、保密性更高。那么&#xff0c;企业邮箱怎么注册申请呢&#xff1f;下面我们来详细介绍一下。 第一步&#xff1a;选择邮箱…

百日筑基篇——python爬虫学习(一)

百日筑基篇——python爬虫学习&#xff08;一&#xff09; 文章目录 前言一、python爬虫介绍二、URL管理器三、所需基础模块的介绍1. requests2. BeautifulSoup1. HTML介绍2. 网页解析器 四、实操1. 代码展示2. 代码解释1. 将大文件划分为小的文件2. 获得结果页面的url3. 获取结…

第05天 SpringBoot自动配置原理

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a;每天一个知识点 ✨特色专栏&#xff1a…

数学分析:曲线曲面积分

这一章还是很重要的&#xff0c;可以看到为什么dt1^dt2和dt1dt2是一样的。 可以看到&#xff0c;核心还是黎曼和&#xff0c;我们把两种微分的黎曼和都列出来&#xff0c;并且证明两个相等&#xff0c;即可。 这里要注意&#xff0c;微分形式的积分&#xff0c;在黎曼和的情况…

【解析postman工具的使用(基础篇】

postman前端请求详解 主界面1.常见类型的接口请求1.1 查询参数的接口请求1.1.1 什么是查询参数?1.1.2 postman如何请求 1.2 ❤表单类型的接口请求1.2.1 复习下http请求1.2.2❤ 什么是表单 1.3 上传文件的表单请求1.4❤ json类型的接口请求 2. 响应接口数据分析2.1 postman的响…

解决校园网使用vmware桥接模式,虚拟机与物理机互相ping通,但是虚拟机ping不通百度的问题

遇到的问题 使用校园网时&#xff0c;桥接模式下&#xff0c;物理机可以ping通虚拟机&#xff0c;但是虚拟机ping不通主机 解决方法 在物理机中查看网络相关信息 ipconfig 修改虚拟机网卡信息 vim /etc/sysconfig/network-scripts/ifcfg-ens33 注意 /ifcfg-ens33需要根据…

理解ConcurrentSkipListMap(有点类似于并发的TreeMap)

是一个分层的结构。 从最上面开始查找&#xff0c;最后层层往下查。 插入和删除有可能会引起节点Level的变更。 key是有序的&#xff0c;因此可以看做是并发的TreeMap

Docker常规安装简介

Docker常规安装简介 1、总体步骤&#xff1a;服务端口映射 搜索镜像 拉取镜像 查看镜像 启动镜像 停止容器 移除容器 2、安装tomcat docker hub上面查找tomcat镜像 docker search tomcat 从docker hub上拉取tomcat镜像到本地 docker pull tomcat docker images查看是否有拉…

2023年国赛数学建模思路 - 案例:ID3-决策树分类算法

文章目录 0 赛题思路1 算法介绍2 FP树表示法3 构建FP树4 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模…

电机故障诊断(python程序,模型为MSCNN结合LSTM结合注意力机制模型,有注释)

代码运行环境要求&#xff1a;TensorFlow版本>2.4.0&#xff0c;python版本>3.6.0 1.电机常见的故障类型有以下几种&#xff1a; 轴承故障&#xff1a;轴承是电机运转时最容易受损的部件之一。常见故障包括磨损、疲劳、过热和润滑不良&#xff0c;这些问题可能导致噪音增…

97. Interleaving String 72. Edit Distance 121. 122. 123

​​​​​​97. Interleaving String 72. Edit Distance 一个bottomup&#xff08;棋盘从右下角外围逼近[0,0]&#xff09;如果横轴是string1的index i&#xff0c;纵轴string2的index j&#xff0c;那么&#xff0c;很奇妙的是i和j一起&#xff08;从右下角的格子看&#xf…

RTT(RT-Thread)IO设备模型

目录 IO设备模型 模型框架原理 IO设备类型 创建和注册IO设备 RTT设备管理程序实现原理 访问IO设备 查找设备 初始化设备 打开设备 关闭设备 控制设备 读写设备 数据收发回调 数据接收回调 数据发送回调 设备模型实例 IO设备模型 RT-Thread 提供了一套简单的 I/O …

穿透防线:泛微E-Office任意文件上传漏洞解析

子曰&#xff1a;“学天时习之&#xff0c;不亦说乎&#xff1f;有朋自远方来&#xff0c;不亦乐乎&#xff1f;人不知而不愠&#xff0c;不亦君子乎&#xff1f;” 漏洞复现 访问漏洞url&#xff1a; 构造漏洞利用payload ​POST /general/index/UploadFile.php?muploadP…

Kettle系列(二)smart-kettle本地离线部署

Kettle系列&#xff08;二&#xff09;smart-kettle本地离线部署 说明一、概述二、代码下载&#xff08;1&#xff09;后端代码依赖下载&#xff08;2&#xff09;前端代码依赖下载 三、创建数据库&#xff08;mysql8&#xff09;四、修改配置文件五、mysql8数据库配置六、其他…

Python学习笔记第五十七天(Pandas 数据清洗)

Python学习笔记第五十七天 Pandas 数据清洗Pandas 清洗空值isnull() Pandas替换单元格mean()median()mode() Pandas 清洗格式错误数据Pandas 清洗错误数据Pandas 清洗重复数据duplicated()drop_duplicates() 后记 Pandas 数据清洗 数据清洗是对一些没有用的数据进行处理的过程…

最强自动化测试框架Playwright(19)- 事件

Playwright允许收听网页上发生的各种类型的事件&#xff0c;例如网络请求&#xff0c;创建子页面&#xff0c;专用工作人员等。有几种方法可以订阅此类事件&#xff0c;例如等待事件或添加或删除事件侦听器。 等待事件 大多数情况下&#xff0c;脚本需要等待特定事件的发生。…

实训一 :Linux的启动、关机及登录

实训一 &#xff1a;Linux的启动、关机及登录 2017 年 2 月 22 日 今日公布 实训目标 完成本次实训&#xff0c;将能够&#xff1a; 描述Linux的开机过程。在图形模式和文本模式下登录Linux。关闭和重启Linux 实训准备 一台已安装RHEL6的虚拟计算机&#xff0c;Linux虚拟…

【嵌入式环境下linux内核及驱动学习笔记-(19)LCD驱动框架2-FrameBuffer】

目录 1、 Frmebuffer(帧缓冲&#xff09;操作介绍1.1 显示设备的抽象1.2 内存映像1.3 输出画面数据1.4 用户态下操作屏显1.4.1 用文件I / O 操作屏显1.4.2 mmap() 函数1.4.3 ioctl()函数1.4.5 用命令操作屏1.4.6 测试程序 2、Framebuffer总体框架2.1 框架要点2.2 fbmem.c分析2.…

中小企业项目管理软件推荐:选择适合的工具提升项目效率!

中小企业项目管理软件有哪些&#xff1f;Zoho Projects是一款好用无广告的项目管理软件。当个小创业者是真的不容易&#xff0c;不仅要管理团队&#xff0c;还要管理团队项目。很多团队之前用了好多项目管理的软件&#xff0c;但是都不太满意。但是如果你经常参加创业者聚会上&…

安装cuda/cudann和pytorch

一、查看驱动信息 # 进入CMD输入命令 nvidia-smi 也可以右下角图标打开NVIDIA 设置进行查看 二、下载安装CUDA 1、下载 下载地址 https://developer.nvidia.com/ 2、安装 推荐自定义安装。建议只勾选Cuda&#xff0c;只安装这一个就好&#xff0c;以免报错安装失败。 3、验证…