1. 程式人生 > >【採坑篇】REHL6.5升級glic,支援C++11特性

【採坑篇】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

PowerShelldo 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 缓存功能&#