1. 程式人生 > >Linux下GLIBCXX和GLIBC版本低造成的編譯錯誤的解決方案

Linux下GLIBCXX和GLIBC版本低造成的編譯錯誤的解決方案

最近在給編譯環境centOS 6.5安裝新版clang (clang 3.4/3.5)的時候,雖然已經裝了gcc 4.9.1, 但編譯的時候(參考clang官方主頁http://clang.llvm.org/get_started.html的步驟,在獨立build目錄下執行clang自帶的configure指令碼),仍然出了“c compiler cannot create executables”的提示,去檢視log資訊,發現裡面有下面幾個錯誤:

clang: /lib64/libc.so.6: version `GLIBC_2.15' not found (required by clang)
clang: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by clang)
clang: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by clang)
clang: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by clang)

這裡是兩個系統版本庫版本過低的問題,一個是關於C++的庫libstdc++, 一個是關於C系統基礎執行庫GLIBC,前者比較好辦,後者十分基礎,一般一個版本的centos會指定一個GLIBC,可以去升級,但這樣CentOS本身版本的穩定性的可能就會被破壞。

1. 我們著手解決GLIBCXX的問題,C++庫,首先檢視錯誤資訊提示中的lib檔案的資訊。

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

這裡是列印 libstdc++.so.6的輸出資訊中限定(grep) GLIBC庫的資訊

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

$ll  /usr/lib64/libstdc++.so.6
lrwxrwxrwx 1 root root 30 Sep 23 06:21 /usr/lib64/libstdc++.so.6 -> /usr/lib64/libstdc++.so.6.0.13

也就是系統以前有一個6.0.13版本,確實比較舊了,那麼我們有新版本麼?我們安裝了gcc 4.9.1,按理說應該已經裝了新版的libstdC++.,如果沒有,可以去網上下一個。

先在本機找:

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


我們發現,gcc安裝時把/libstdc++.so.6.0.20 安裝到了/usr/local/lib64下,但並沒有改變libstdc++.so.6的連結指向。

那麼我們手動來更新軟連線(也可以位元組指向/usr/local下的檔案,不用拷貝, 看鴿子的檔案管理習慣)

$ cp /usr/local/lib64/libstdc++.so.6.0.20 /usr/lib64 
$ rm -rf /usr/lib64/libstdc++.so.6
$ ln -s /usr/lib64/libstdc++.so.6.0.20 /usr/lib64/libstdc++.so.6
$ strings /usr/lib64/libstdc++.so.6 | grep GLIBC

然後結果:

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

庫更新完畢。我們已經支援到了GLIBCXX_3.4.20

此時再進行編譯,GLIBCXX的問題是沒有了。

2. 關於C基本執行庫GLIBC,因為要慎重,所以我寫在下一篇部落格:

相關推薦

LinuxGLIBCXXGLIBC版本造成編譯錯誤解決方案

最近在給編譯環境centOS 6.5安裝新版clang (clang 3.4/3.5)的時候,雖然已經裝了gcc 4.9.1, 但編譯的時候(參考clang官方主頁http://clang.llvm.org/get_started.html的步驟,在獨立build目錄下執行

Linux Redis叢集安裝部署及使用詳解(線上離線兩種安裝+相關錯誤解決方案)

一、應用場景介紹   本文主要是介紹Redis叢集在Linux環境下的安裝講解,其中主要包括在聯網的Linux環境和離線的Linux環境下是如何安裝的。因為大多數時候,公司的生產環境是在內網環境下,無外網,伺服器處於離線狀態(最近公司要上線專案,就是無外網環境的Linux,被離線安裝坑慘了,走了很多彎路,說多

linuxssh連接慢的原因調查及解決方案

acc 設置 發現 lin opened 左右 config 連接 war 項目中的一臺阿裏雲,最近一段時間出現ssh的時候,連接非常慢,大概輸入密碼後要10-20秒左右才能連上,以下記錄調查過程及解決辦法 通過網上的一些查詢,發現大都是因為設置dns,hosts或者通過關

linux訪問windows ftp服務器出現亂碼問題解決方案

linux ftp 在Linux下訪問windows ftp服務器時可能會出現中文亂碼的問題,這是由於中文編碼不同的問題。Windows中文編碼使用的是gbk,而linxu大多數版本默認的編碼是utf8。一種解決方案是在終端使用lftp登錄,手動設置中文編碼方式,在終端中輸入lftp ftp://&l

linux中HADOOP_HOMEJAVA_HOME清除掉但是依然有效解決方案!!!!

場景: 在平時我們學習或者開發的時候有時候會遇到當我們升級jdk的時候會發現升級之後依然還是以前的版本(HADOOP_HOME也是一樣)然我很苦惱!!! 然後從大佬那裡聽來了一個有效的解決方案!!有兩個 第一: 關機重啟!!!(小白程式設計師專用) 在使用伺服器的時候千萬不要

linux磁碟空間不足導致oracle無法登入的解決方案

問題:​​​​​​oracle突然無法登入成功 原因:發現是磁碟空間不足,而且oracle被關閉了 解決方案如下: 1、確定oracle安裝在哪臺linux機器,並登入 2、檢視磁碟使用情況 : df -h,看看哪個磁碟空間滿了 3、找到沒有用的檔案,並刪掉。

Linux停Tomcat伺服器,出現Connection refused錯誤解決辦法

錯誤內容如下 : 2010-9-19 16:09:58 org.apache.catalina.startup.Catalina stopServer 嚴重: Catalina.stop:  java.net.ConnectException: Connectio

linux搜狗輸入法不能輸入中文的解決方案

1 問題 Ubuntu下一直在使用搜狗拼音, 之前能正常使用, 但是最近幾天輸入法開始抽風, 無法輸出中文. 具體現象是, 可以撥出搜狗輸入法介面, 但是候選詞列表無顯示 如下圖所示 2 解決方案 2.1 刪除

LinuxMySQL報Table 'xxx' doesn't exist錯誤解決方法

原因:linux下mysql預設資料庫表名和資料庫名區分大小寫 解決方法: 1、改為同樣的大小寫。 2、更改mysql設定,使其不區分大小寫,具體步驟: cd /etcvi my.cnf在[mysq

64位linuxeclipseADT不生成R.java檔案的終極解決方案

最近嘗試在linux下搭建android開發環境。下了個64位的adt-bundle,下載好sdk後,發現新建專案時壓根兒就不生成R.java檔案。然後我是了N多種方法,比如說clean projec

VS Code非英語版本連接TFS錯誤解決方案

修改 方案 tab appear ati spa 配置 perl 輸入 使用VS Code連接TFS時,提示以下錯誤: (team) It appears you have configured a non-English version of the TF exec

linux安裝解除安裝自己想要版本的git版本

1.Linux下安裝 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker 2.刪除已有的git yum r

linux bash_profilebashrc區別

bash_profile和bashrc區別【.bash_profile 與 .bashrc 的區別】.bash_profile is executed for login shells, while .bashrc is executed for interactive non-login shells.【l

解決Linux serverclient 通過TCP通訊:accept成功接收卻報錯的問題

ipv4 socket error 實例代碼 ... lis col argc 例子   今天在寫簡單的TCP通訊例子的時候,遇到了一個問題:server 和client能夠連接成功,並且client也能夠正常發送,但server就是接收不到,在網上搜索一番後,終於解決了問

Linux安裝卸載軟件

20180324一、安裝方法:rpm工具、yum工具、源碼包 1、rpm工具:由redhat公司開發; yum工具:是由Python開發的; 源碼包:由C語言開發,C語言是Linux上最標準的程序語言。 二、rpm工具的使用1、在虛擬機上掛載一CD到/mnt/目錄下: mount /dev/cdrom /m

Unix / Linux nohup & 的區別

http app 後來 gts -s 周期 能夠 不同 history 聲明:本文首發 簡單教程,網址為 https://www.twle.cn/t/332#reply0 就在剛剛回家的路上,被前同事奪命三連 call 呼喚解決一個問題:為啥放在 crontab 裏的命

Linuxat crontab的基本運用以及臨時檔案基本管理

一、at的基本運用 在終端輸入watch -n 1 ls -R /mnt/           //監控檔案每秒檢視一次並以第歸的方式列出來 使用at命令制定延時任務 

linux升級軟體包版本等方法

       Linux環境下,要想檢視某個軟體(package)是否安裝。        rpm包方式安裝的,使用 rpm -qa | grep “軟體或者包的名字“。      

linux查看mysql版本的四種方法

ace linux下 help upload width lin sql 四種 xid Linux查看MySQL版本的四種方法 1 在終端下執行 mysql -V 2 在help中查找 mysql --help |grep Distrib 3 在mysql 裏查看 sele

LinuxTclexpect 的安裝

背景介紹:          因搭建遊戲中心的測試環境,需要安裝兩個程式tcl8.4.13-src.tar.gz、expect-5.43.0.tar.gz    安裝方法:    &n