Centos6非root用户升级自己的Linux gcc版本(附Linux下安装pyltp的问题解决)

在Centos用户下通过pip方式或者源码的方式安装pyltp的时候,出现

error: command ‘gcc’ failed with exit status 1

的错误,一般是因为gcc4.4.7的版本不支持C++11的特性,这时候需要升级到gcc4.8.2。同时为了不升级系统的gcc版本给linux其他用户造成影响,需要在非root用户下安装和使用自己的gcc版本。以下是基本操作。

1、获取gcc4.8.2安装包并解压

wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.2/gcc-4.8.2.tar.bz2
tar -jxvf gcc-4.8.2.tar.bz2

此外,http://ftp.gnu.org/gnu/gcc 里面有所有的gcc版本供下载。

2、下载供编译需求的依赖项
这个神奇的脚本文件 download_prerequisites 会帮我们下载、配置、安装依赖库,当然可以查看该文件中的相关依赖,自己通过源码的方式下载编译安装。

cd gcc-4.8.0 
./contrib/download_prerequisites 

3、在gcc-4.8.0目录下建立一个目录供编译出的文件存放

mkdir gcc-build-4.8.2
cd gcc-build-4.8.2

4、在gcc-build-4.8.2目录下生成Makefile文件

../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib

5、编译

make

# -j4选项是make对多核处理器的优化,如果不成功请使用 make
# make -j4

# 如果要清理编译的文件话使用
# make clean

6、非root用户指定路径安装gcc

# 新建一个安装的目录 gcc-install-4.8.2
# 通过DESTDIR指定安装目录的绝对路径,安装在当前用户的目录下

make DESTDIR=/home/用户名/gcc-install-4.8.2/ install

# 如果需要修改系统的gcc版本,使用
sudo make install

7、为当前用户配置系统环境变量

# 编辑用户的环境变量
vim ~/.bashrc

# 在文件尾添加一行
export PATH=/home/用户名/gcc-install-4.8.2/usr/local/bin:/home/用户名/gcc-install-4.8.2/usr/local/lib64:$PATH

# 使环境变量生效
source ~/.bashrc

然后可以在当前用户下使用安装的新版本的gcc
查看gcc版本

gcc -v

附Linux下安装pyltp的问题解决

8、ImportError: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18’ not found

出现上述问题一般是在pip或者源码编译pyltp的时候使用的还是系统自带gcc4.4.7版本。首先可以使用如下命令查看系统自带gcc4.4.7版本的是否有相应的库

strings /usr/lib64/libstdc++.so.6|grep CXXABI

然后可以通过如下命令查看当前用户安装的gcc4.8.2版本是否有相应的库,如果没有可能需要重新安装更高版本的gcc。

# libstdc++.so.6的绝对路径取决于之前用户安装gcc时候安装的路径,在gcc安装目录的usr/local/lib64中
strings /home/用户名/gcc-install-4.8.2/usr/local/lib64/libstdc++.so.6|grep CXXABI

如果当前用户安装的gcc版本中有相应的库,则下一步解决该问题需要配置对应的环境变量

# 编辑用户的环境变量
vim ~/.bashrc

# 在环境变量中添加如下行
export PATH=/home/用户名/gcc-install-4.8.2/usr/local/lib:$PATH
export PATH=/home/用户名/gcc-install-4.8.2/usr/local/lib64:$PATH
export LD_LIBRARY_PATH=/home/用户名/gcc-install-4.8.2/usr/local/lib:$LD_LIBRARY_PATH
# 如果上述行添加了仍无效,继续添加以下行
# 该环境变量LD_PRELOAD可以强行替换共享库中运行的符号 libstdc++.so.6。
export LD_PRELOAD=/home/用户名/gcc-install-4.8.2/usr/local/lib64/libstdc++.so.6

# 使环境变量生效
source ~/.bashrc

如果有root权限同时需要修改系统的gcc相关库,可以参考使用以下的方式

cp /usr/local/lib64/libstdc++.so.6.0.18 /usr/lib64 
rm -rf /usr/lib64/libstdc++.so.6
ln -s /usr/lib64/libstdc++.so.6.0.18 /usr/lib64/libstdc++.so.6

strings /usr/lib64/libstdc++.so.6 | grep GLIBC

gcc安装时把/libstdc++.so.6.0.18 安装到了/usr/local/lib64下,但并没有改变libstdc++.so.6的链接指向。那么需要手动更新软链接(也可以直接指向/usr/local下的文件,不用拷贝, 看各自的文件管理习惯)

参考资料:
1、https://www.jianshu.com/p/38ed45155969 2019.12.26
2、https://www.linuxidc.com/Linux/2015-01/112595.htm 2019.12.26
3、https://www.cnblogs.com/lzpong/p/5755678.html 2019.12.26
4、https://blog.csdn.net/OliverkingLi/article/details/89645710 2019.12.26
5、https://blog.csdn.net/laopaifang/article/details/79425488 2019.12.26
6、https://blog.csdn.net/ZX714311728/article/details/69628836 2019.12.26

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值