【採坑篇】REHL6.5升級glic,支援C++11特性
場景需求
預設的Redhat 6.5
的glibc版本最高為2.12, 而在實際應用中引入了一個C++11
編寫的服務,專案執行所依賴的包往往需要更高版本的glibc庫支援, 因此在不升級系統的前提下, 需要手動更新系統glibc庫. 一般遇到錯誤libc.so.6: version GLIBC_2.14 not found
時,表示需要對glibc進行升級了.
錯誤資訊
執行程式報錯:
/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found
/lib64/libc.so.6: version `GLIBC2.14' not found
/lib64/libc.so.6: version `GLIBC2.17' not found
檢視系統版本
[root@bogon ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.5 (Santiago)
檢視glibc版本
[root@bogon ~]# strings /lib64/libc.so.6 |grep GLIBC
RedHat6.5
輸出如下glibc版本列表, 從此圖可以看出系統最高支援glibc的2.12
版本:
檢視軟連線:
ll /lib64/libc**
glibc升級至2.17
首先, 點選此處下載glibc, 得到glibc-2.17.tar.gz
glibc-2.17.tar.gz
:
[root@bogon upgrade_dir]# ls
glibc-2.17.tar.gz
[root@bogon upgrade_dir]# tar zxvf glibc-2.17.tar.gz
當前目錄下得到目錄glibc-2.17
, 執行進入目錄, 依次執行如下命令編譯安裝glibc-2.17
:
[root@bogon upgrade_dir]# cd glibc-2.17
[root@bogon upgrade_dir]# mkdir build
[root@bogon upgrade_dir]# cd build/
[root@bogon upgrade_dir]# ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin #注意了,別修改路徑
[root@bogon upgrade_dir]# make -j23
[root@bogon upgrade_dir]# make install
請不要有其他騷操作!!!
至此,升級完成,驗證結果:
[root@bogon ~]# 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
升級GLIBCXX版本
下載升級包
檢視libstdc++版本
[root@bogon ~]# strings /usr/lib64/libstdc++.so.6 |grep GLIBCXX
RedHat6.5
輸出如下libstdc++版本列表, 從此圖可以看出系統最高支援libstdc++的3.14.13
版本:
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_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
解壓升級包
ar -vx libstdc++6_4.7.2-5_amd64.deb && tar zxvf data.tar.gz
備份並升級
mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak
cp -rf ./usr/lib/x86_64-linux-gnu/libstdc++.so.6.17 /usr/lib64/
ln -s /usr/lib64/libstdc++.so.6.17 /usr/lib64/libstdc++.so.6
驗證升級成功
[root@bogon ~]# strings /usr/lib64/libstdc++.so.6 |grep GLIBCXX
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_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
大功告成!
採坑篇
第一次升級時,僅僅以為直接引用編譯出的動態庫即可,不想升級整套環境,然後遇到了很多坑,以至於達到了系統無法登入,系統指令無法使用的地步,但是,本人有個好習慣,做任何修改之前會先行備份,才逐步恢復並按照上述步驟升級成功,以下錯誤是由什麼引起的不再過多描述,僅僅記錄錯誤以及如何解決。
錯誤一:系統指令不可用
錯誤資訊:
ls: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument
cp, clear, mv, rm等各種指令,均不可用,兩種場景:
1)你把編譯出的libc-2.17.so
複製到了/lib64
目錄下,此時執行ldconfig
重建軟連線,此時:
/lib64/libc.so.6 -> /lib64/libc-2.17.so
解決辦法(希望你已經將原來的libc.so.6和libc-2.12.so
已經備份至其他目錄下):
在控制檯執行:
[[email protected] ~]# export LD_LIBRARY_PATH=/usr/lib64:/usr/local/lib64:/root/upgrade_back
這時,系統指令均可使用,然後刪除/lib64
下的libc-2.17.so
,再執行ldconfig
即可
[root@bogon ~]# rm -rf /lib64/libc-2.17.so
2)你沒有做任何覆蓋,僅僅建立軟連線到/lib64/libc.so.6
,那就處理簡單了
-- 建立軟連線
[root@bogon ~]# ln -sf /opt/glibc-2.17/lib/lib-2.17.so /lib64/libc.so.6
恢復方法:
[root@bogon ~]# export LD_LIBRARY_PATH=/usr/lib64:/usr/local/lib64:/root/upgrade_back
[root@bogon ~]# ldconfig
錯誤二:locale庫報錯
錯誤資訊:
-bash: warning: setlocale: LC_CTYPE: cannot change locale (en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_COLLATE: cannot change locale (en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_MESSAGES: cannot change locale (en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_NUMERIC: cannot change locale (en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_TIME: cannot change locale (en_US.UTF-8): No such file or directory
相關推薦
【採坑篇】REHL6.5升級glic,支援C++11特性
場景需求 預設的Redhat 6.5 的glibc版本最高為2.12, 而在實際應用中引入了一個C++11編寫的服務,專案執行所依賴的包往往需要更高版本的glibc庫支援, 因此在不升級系統的前提下, 需要手動更新系統glibc庫. 一般遇到錯誤libc.so
Java面試中遇到的坑【填坑篇】
看到大家對上篇《Java面試中遇到的坑》一文表現出強力的關注度,說明大家確實在面試中遇到了類似的難題。大家在文章留言處積極留言探討面試中遇到的問題,其中幾位同學還提出了自己的見解,我感到非常高興,還有幾位同學強烈要求給出題目答案,那我很樂意跟大家一起探討分享這些題目。 我將題目答案寫下來,這個並非標準答案,
【經典100題】 題目5 三個數,從小到大輸出
題目 輸出三個整數,請把這三個數從小到大輸出 分析: 簡單的大小比較,排序就行 C語言實現 #include<stdio.h> void orderABC(int a, int b, int c); void main() { int a, b, c;
GCC 升級4.8 支援c++11
gcc 升級到4.8 用來支援c++11 1)cd gcc-4.8.1 , ./contrib/download_prerequisites 下載依賴 2) cd .. , mkdir gcc-build-4.8.1 , cd gcc-build-4.8.1,
【elasticsearch安裝篇】Linux Centos 7.5 安裝 Kibana及分詞器
安裝elasticsearch,可參考: 【elasticsearch安裝篇】Linux centos6.8 安裝配置elasticsearch6.3.2 親測成功(一) 【elasticsearch安裝篇】Linux centos6.8 安裝配置elasticsearch6
【採坑】docker部署open-falcon+grafana總結
一、背景 # 二、步驟 1.docker部署open-falcon (1)啟動mysql容器 docker run -itd \ --name falcon-mys
【採坑】docker 部署pmm與mysql監控
docker 部署pmm與mysql監控 一、背景 二、步驟 1.下載PMM Server Docker映象 #版本可自選 docker create -v /opt/prometheus/data
【採坑】Ldap+Apache+Svn整合訪問
一、背景 二、步驟(此步驟基於docker容器中部署,與宿主機部署沒什麼太大差異) 1.啟動一個centos容器(此處不多做介紹) docker run --name centos3 -d harbor-registry.ipaychat.com/centos
mysql學習【第9篇】:MySQL 5.7.9版本sql_mode=only_full_group_by問題
學習 sele 語句 nag ref func res not star MySQL 5.7.9版本sql_mode=only_full_group_by問題 用到GROUP BY 語句查詢時com.mysql.jdbc.exceptions.jdb
微信被動回覆訊息失敗所有的坑!Java篇【避坑指南】
背景: 隨便一個微信訂閱號都可以,使用者在訂閱號傳送訊息,然後我們自己的伺服器做出訊息回覆,之間的過程處理好多坑。 我這裡是從接入成功後開始踩到的坑,關於接入的沒什麼,微信公眾號文件很清楚。 開始了: 我的伺服器使用的ssm框架 1.坑列表: 獲取微信請求我方伺服
【採坑之路】You may need an appropriate loader to handle this file type.
開啟vue之旅,也是開始採坑之旅了。 這是一個京東購物車小案例,採用元件化開發,將html靜態頁面拆分成一個個元件,採用webpack打包時,引用的圖片明明存在但報錯如下: ERROR in ./jd-shopcarts/assets/images/icon-kin.pn
【Eclipse提高開發速度-插件篇】安裝VJET插件,JS等提示開發插件
cau sof sta scrip update 1.4 spa text article 1、安裝Apache Batik CSS 一般安裝VJET插件會出現 Cannot complete the install because one or more requir
Python開發【第六篇】:Python基礎條件和循環
ora back strong als 重復執行 操作 enume 條件表達式 服務 目錄 一、if語句 1、功能 2、語法 單分支,單重條件判斷 多分支,多重條件判斷 if + else 多分支if + elif + else 語句小結 + 案例 三元表達式 二、whil
Python開發【第五篇】:Python基礎之2
對齊方式 dex 字符串 後退 ring lag nic 有效 func 字符串格式化 Python的字符串格式化有兩種方式: 百分號方式、format方式 百分號的方式相對來說比較老,而format方式則是比較先進的方式,企圖替換古老的方式,目前兩者並存。[PEP-310
Python開發【第四篇】:Python基礎之函數
nco pos *args 更強 三元 sequence hunk ins att 三元運算 三元運算(三目運算),是對簡單的條件語句的縮寫。 # 書寫格式 result = 值1 if 條件 else 值2 # 如果條件成立,那麽將 “值1” 賦值給result
Python之路【第五篇】:面向對象及相關
訪問 遊戲 font raise 內置 無法 sys 接下來 print 面向對象基礎 基礎內容介紹詳見一下兩篇博文: 面向對象初級篇 面向對象進階篇 其他相關 一、isinstance(obj, cls) 檢查是否obj是否是類 cls 的對象 class F
PowerShell【do while篇】
+= col pow while clas color cnblogs shel rsh 1 $num=0 2 while($num -le 10) 3 { 4 $num 5 $num+=1 6 } 1 $num=0 2 do 3 { 4 $num 5 $num+=
【java規則引擎】drools6.5.0版本中kmodule.xml解析
excel表格 兩個 狀態 excel表 自定義 roo 暫時 指定 一次 kmodule.xml文件存放在src/main/resources/META-INF/文件夾下。 1 <?xml version="1.0" encoding="UTF-8"?>
用戶控件的緩存技術之一【共三篇】
common .net http get pos run param pre cati ref 原文發布時間為:2009-10-29 —— 來源於本人的百度文章 [由搬家工具導入]因为开发的网
用戶控件的緩存技術之二【共三篇】
asp.net ont w3c inherits duration sys bject wire efi 原文發布時間為:2009-10-29 —— 來源於本人的百度文章 [由搬家工具導入]ASP.NET 缓存功能