在学习或者编写C/C++程序的时候,可能由于编译器的版本较低,导致一些新增的知识点在加入到程序编译时,会出现一些问题,例如编译完成之后生成可执行文件,但你在执行可执行文件的时候,系统会报这样的错误:

[cpp] view plain copy
  1. [root@localhost~]#./a.out
  2. ./a.out:/usr/lib/libstdc++.so.6:version`GLIBCXX_3.4.14'notfound(requiredby./a.out)<spanstyle="font-size:14px;"><spanstyle="font-family:'TimesNewRoman';">
  3. </span><spanstyle="font-family:'TimesNewRoman';"></span></span>

这个原因是你升级了gcc的版本之后却没有用生成的动态库替换老版本的动态库, 这样在程序编译运行的时候偶尔就会遇到上面所述的问题,这个问题我们放到后面再进行解诀,下面就开始介绍gcc/g++编译器的升级过程:

首先升级gcc和g++是没有便捷方式的,例如像yum update .... yum install 这些命令都是没用的,或者添加yum的repo文件也是不行的,所以我们只能手动编译安装了,下面就开始我们的安装过程。

1、获取安装包并解压

wgethttp://ftp.gnu.org/gnu/gcc/gcc-6.1.0/gcc-6.1.0.tar.bz2
  • tar-jxvfgcc-6.1.0.tar.bz2
  • 当然, http://ftp.gnu.org/gnu/gcc里面有所有 的gcc版本可供下载,最新的版本已经更新到7.1.0,但是我们并不需要最新版本,下面就用6.1.0版本来操作,其他的版本都可类似操作。

    2、下载供编译需求的依赖项

    这个神奇的脚本文件会帮我们下载、配置、安装依赖库,可以节约我们大量的时间和精力。

    cdgcc-6.1.0
  • ./contrib/download_prerequisites
  • 运行这个脚本要在联网状态下完成,因为要下载配置,安装依赖库,这也需要时间,网络不好的时候会是一个较慢长的等待时间。

    3、建立一个目录供编译出的文件存放

    [html] view plain copy
      mkdirgcc-build-6.1.0
    1. cdgcc-build-6.1.0
    4、生成Makefile文件
    ../configure-enable-checking=release-enable-languages=c,c++-disable-multilib
    5、编译

    make-j4
    -j4选项是make对多核处理器的优化,如果不成功请使用make
    (注意:此步骤非常耗时,我虚拟机耗时近3小时; 实体机近80分钟,cpu基本是满的,内存也使用不少)

    6、安装

    makeinstall
    (安装需要root权限)

    查看安装

    ls /usr/local/bin | grep gcc

    7、重启然后查看gcc版本

    gcc -v

    8、这之后你就可以写个C++11的程序段进行测试

    代码在此处省略。。。。。。

    g++ -std=c++0x -o demoCpp11 demoCpp11.cpp

    通过上面的步骤就可以完成对g++和gcc的升级


    下面我们来解决开头提到的问题:

    源码编译升级安装了gcc后,编译程序或运行其它程序时,有时会出现类似/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found的问题。这是因为升级gcc时,生成的动态库没有替换老版本gcc的动态库导致的,将gcc最新版本的动态库替换系统中老版本的动态库即可解决。

    (1). 运行以下命令检查动态库:

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

    从输出可以看出, gcc的动态库还是旧版本的。说明出现这些问题,是因为升级 gcc时,生成的动态库没有替换老版本 gcc的动态库。

    (2). 执行以下命令,查找编译gcc时生成的最新动态库:

    find / -name "libstdc++.so*"

    将上面的最新动态库libstdc++.so.6.0.22复制到/usr/lib64目录下

    cd/usr/lib64

    cp /root/Downloads/gcc-6.1.0/gcc-build-6.1.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22 ./

    (3). 删除原来软连接:

    rm -rf libstdc++.so.6

    (4). 将默认库的软连接指向最新动态库:

    ln -s libstdc++.so.6.0.22 libstdc++.so.6

    (5). 默认动态库升级完成。重新运行以下命令检查动态库:

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

    可以看到 输出有"GLIBCXX_3.4.14" 了


    注意:网上的有一些教程在解决这个问题的时候会有这种方法,就是在网上找一个libstdc++.so.6.0.22,然后使用这个来生成软连接,这样是不行的,一定要用自己编译的动态库,否则当你重启电脑的时候,你的Centos桌面系统就会出问题,图形化界面都无法操作,就是因为你使用了一个来路不明的动态库导致的,解决办法就是使用自己编译的动态库或者系统自带的动态库来生成软连接,这样重启之后系统就会恢复了。

    Centos/Linux 下升级GCC G++的更多相关文章

    1. 将POD规范属性与其Xcode配置中的不同构建设置相关联(例如,发布,调试)

      我正在尝试为现有的库项目创建POD规范.在Xcode项目中,构建设置为不同的构建配置定义了不同的预处理器宏例如:对于“调试”配置:对于“发布”配置:如何将这些设置映射到相应的POD规范?

    2. 在ios上使用来自框架的boost :: filesysystem路径

      我一直在使用Boost作为PeteGoodliffe脚本构建的框架已有一段时间了.效果很好.最近我遇到了一个问题,可以通过将以下代码放入另一个全新的XCode项目中的视图控制器的viewDidLoad中来重现:当路径对象被销毁时会导致EXC_BAD_ACCESS.有没有其他人遇到这个问题?

    3. ios – LLVM,GCC 4.2和Apple LLVM编译器之间的区别3.1

      LLVMGCC4.2和AppleLLVM编译器3.1之间的主要区别是什么?

    4. .dylib在Debug中链接,在XCode中找不到适用于iPhone的版本

      所以我已经将libxml2.2.dylib库包含在我的iPhoneXCode项目中,以创建一些Xml和XPath解析实用程序.当我编译并运行在模拟器和设备的调试模式时,我没有问题,但是,当我切换到发布模式我得到…

    5. ios – 在/usr/lib/system/libcache.dylib中,缺少必需的架构armv6

      在试图为iphoneos编写一个虚拟程序时,Xcode4,gcc似乎没有超出初始的sysroot目录如果我把sysroot,以下作品,但感觉非常干酪,而且不可伸缩.这里发生了什么?

    6. xcode – 如何正确设置运行路径,搜索路径和安装名称?

      任何人对我可能做错了什么有什么想法?

    7. 在编译的iOS应用程序(IPA)中加密内容

      由于IPA结构只是一个压缩文件,包含编译代码媒体内容,如图像&音频,我如何保护内容免受别人的窃取?是否有加密可以添加到IPA?

    8. ios – OS X:将.dylib转换为.a / .o(动态到静态)?

      假设我已经阅读了thiscaveat,我仍然希望将TBB用作静态链接库.但我真的不想重写TBBmakefile来生成libtbb.a而不是libtbb.dylib.是否有一个简单的命令行方式将libtbb.dylib转换为libtbb.o并使用相同的入口点?

    9. 如何在Xcode 4.5中关闭垃圾回收,并在切换ARC时摆脱cl ang错误1?

      我刚刚重新打开了一个被设置为使用垃圾收集的项目,并且我最后在Xcode3中打开.现在在Xcode4.5中再次打开它,并希望将其现代化,我正在尝试切换ARC.但是,当构建时,会导致clangerrorerrorerrorerrorininin::::::::::::clang:error:不能同时指定’-fobjc-arc’和’-fobjc-gc-only’啊,我需要关闭我之前使用的垃圾收集.但是,

    10. 如何在iOS上使用嵌入式专用框架和应用程序中的静态库

      在私有框架,应用程序和扩展中使用静态库中的类的正确方法是什么?

    随机推荐

    1. 在airgapped(离线)CentOS 6系统上安装yum软件包

      我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

    2. centos – 命名在日志旋转后停止记录到rsyslog

      CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

    3. centos – 显示错误的磁盘大小

      对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

    4. 如何在centos 6.9上安装docker-ce 17?

      我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

    5. centos – 闲置工作站的异常负载平均值

      我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

    6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

      我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

    7. centos – 大量ssh登录尝试

      22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

    8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

      >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

    9. centos – Azure将VM从A2 / 3调整为DS2 v2

      我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

    10. centos – 广泛使用RAM时服务器计算速度减慢

      我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

    返回
    顶部