最近使用自己的虚拟机编译项目文件,发现报错:

/root/yimi/serv_dev_camera_proxy/serv_dev/esb_middleware/output/linux/bin/libboost_locale.so:对‘std::__throw_out_of_range_fmt(char const*, ...)@GLIBCXX_3.4.20’未定义的引用
/root/yimi/serv_dev_camera_proxy/serv_dev/esb_middleware/output/linux/bin/libboost_locale.so:对‘__cxa_throw_bad_array_new_length@CXXABI_1.3.8’未定义的引用

这个boost库是已经编译好的so动态库,项目中引用到了这个libboost_locale.so库,按理来说编译的时候不会检查libboost_locale.so内部的东西,这个工程在别的机器也也可以编译成功。开始没有头绪,以为这个库找不到c++运行时库,一阵瞎捣鼓,配置环境变量LD_LIBRARY_PATH,还是不行。然后对比了一下其他能编译这个工程的机器和本机的gcc版本,发现自己的是4.8.5版本,另外的机器是4.9.2。更新了一下gcc版本到最新版本,真的能圆满解决了。

下面是升级gcc教程

只需要三个命令

1、sudo yum install centos-release-scl

2、sudo yum install devtoolset-8-gcc*

3、scl enable devtoolset-8 bash

如果上面三个命令都执行成功,然后执行

gcc -v 查看版本

版本是gcc version 8.3.1 20190311 (Red Hat 8.3.1-3) (GCC)就大工告成了。

下面是题外话:

如果升级gcc要自己编译源码,不用想,肯定会很麻烦,要找网站找源码,然后找编译教程,编完后可能还要配置各种问题。这个是使用红帽提供的开发工具包devtoolset来管理gcc版本,这样做的好处是随时切换版本,并且可以并存多个版本,不破坏原有gcc环境。

devtoolset对应gcc的版本

1

2

3

4

devtoolset-3对应gcc4.x.x版本

devtoolset-4对应gcc5.x.x版本

devtoolset-6对应gcc6.x.x版本

devtoolset-7对应gcc7.x.x版本

sudo yum install devtoolset-8-gcc*这个命令是按装gcc8.x.x版本,你也可以改一下数字安装对应版本

scl enable devtoolset-8 bash这个命令执行完之后才会切换gcc版本,并且这仅仅在当前bash生效,如果需要永久生效,可以请自行添加环境变量。

想要登陆就自动切换好gcc版本而不用每次都执行那条命令,我试了几种方法,想要知道哪些坑就往下看,下面是可行的方法,即在~/.bashrc 文件添加如下脚本:

#switch gcc version                                                                                                                                                                                                                                                           
if [[ $SET_GCC_VER != "true" ]]
then 
    export SET_GCC_VER="true"
    echo "devtoolset enable"  
    scl enable devtoolset-8 bash
fi

~/.bashrc这个脚本是每次登陆都会执行的脚本,而执行scl enable devtoolset-8 bash 这个命令之后又相当于重新登陆,会再次执行~/.bashrc,而如果没有那些条件判断,这个~/.bashrc会循环调用,那就gg了,还好能使用Ctr+C杀掉进程。以上这个判断如果执行了一次之后会设置SET_GCC_VER这个环境变量,当下一次执行~/.bashrc的时候判断有这个环境变量就不会再次执行scl enable devtoolset-8 bash 了

如果你把scl enable devtoolset-8 bash 这个命令放在启动脚本/etc/rc.local中,我试了也是不行的。

参考文章:

https://www.cnblogs.com/jixiaohua/p/11732225.html

CentOS完美升级gcc版本方法 - 吴昊博客

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐