gdb用法:html
http://blog.chinaunix.net/uid-26548237-id-3435525.htmlnode
gdb-7.6.tar.gz: (官網下載:http://ftp.gnu.org/gnu/gdb/)linux
gcc-4.8.3.tar.bz2: (官網下載:https://gcc.gnu.org/)c++
附:gdb之TUI: ncurses (wget http://down1.chinaunix.net/distfiles/ncurses-5.9.tar.gz)centos
gdb依賴包:termcap-1.3.1.tar.gz服務器
gcc編譯會有點繁瑣些,下面說一下編譯步驟:app
若是新安裝的CentOS缺乏編譯環境,必須先安裝舊版本的gcc, 而後再進行自舉編譯,舊版安裝方法見在上面介紹過了(用yum),再也不細述。ui
命令:yum install gcc gcc-c++(gcc-c++不可少,否則後面編譯報錯)centos7
提醒,如今centos7.0已經發布出來了,若是你centos版本是7.0,那麼yum安裝的gcc/gcc-c++版本自己就已是4.8.2了。spa
1),下載並解壓縮gcc 4.8.3源碼包
tar jxvf gcc-4.8.3.tar.bz2
2), 下載編譯所需的依賴包
cd gcc-4.8.3;
./contrib/download_prerequisites
你能夠查看README文件,查看編譯gcc須要的下載編譯依賴,主要是mpfr, gmp等。從網上教程來看,gcc4.8.3版本已經寫好了腳本下載這些依賴而無需再手動編譯這些依賴項了。執行上面的腳本就能夠下載依賴的文件。
3, 建立新目錄,並執行configure命令,產生makefile
mkdir ../build-4.8.3
cd ../build-4.8.3
../gcc-4.8.3/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib --prefix= /usr/local/gcc-4.8.3/
說明:本編譯參數中使用--prefix指定了gcc的新安裝目錄。
4), 編譯gcc 4.8.3
這個過程須要好久,你能夠添加-j參數進行多核心編譯,提升編譯速度,好比服務器是40核心的可使用-j40作參數:
make -j40
5), 安裝gcc 4.8.3
make install
6), 更新libstdc++.so.6,更新這個庫可讓程序快速搜索到這個新版本庫,其實你也能夠更改環境變量來完成。
cp /<path_to>/build-4.8.3/prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.18 /usr/lib64
紅字部分在不一樣平臺上有所不一樣
7), 調整libstdc++.so.6的優先級,
可使用ln -sf連接,也可使用alternatives,這裏推薦使用alternative
ln方法:
ln -sf /usr/lib64/libstdc++.so.6.0.18 /usr/lib64/libstdc++.so.6
alternatives方法:
alternatives --install 舊庫全名 庫名 新庫全名 優先級
alternatives --install /usr/lib64/libstdc++.so.6.0.13 libstdc++.so.6 /usr/lib64/libstdc++.so.6.0.13 39
alternatives --install /usr/lib64/libstdc++.so.6.0.13 libstdc++.so.6 /usr/lib64/libstdc++.so.6.0.19 40
附:alternatives 經常使用參數:--install; --remove; --config; --display
檢查是否使用新版庫:
alternatives --display libstdc++.so.6
libstdc++.so.6 - 狀態是自動。
連接目前指向 /usr/lib64/libstdc++.so.6.0.19
/usr/lib64/libstdc++.so.6.0.13 - 優先度 39
/usr/lib64/libstdc++.so.6.0.19 - 優先度 40
當前「最佳」版本是 /usr/lib64/libstdc++.so.6.0.19
[root@localhost bin]# /usr/bin/gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4)
Copyright © 2010 Free Software Foundation, Inc.
本程序是自由軟件;請參看源代碼的版權聲明。本軟件沒有任何擔保;
包括沒有適銷性和某一專用目的下的適用性擔保。
[root@localhost bin]# /usr/local/gcc-4.8.3/bin/gcc --version
gcc (GCC) 4.8.3
Copyright © 2013 Free Software Foundation, Inc.
本程序是自由軟件;請參看源代碼的版權聲明。本軟件沒有任何擔保;
包括沒有適銷性和某一專用目的下的適用性擔保。
[root@localhost bin]# alternatives --display gcc
gcc - 狀態是手工。
連接目前指向 /usr/local/gcc-4.8.3/bin/gcc
/usr/local/gcc-4.8.3/bin/gcc - 優先度 40
/usr/bin/gcc - 優先度 39
當前「最佳」版本是 /usr/local/gcc-4.8.3/bin/gcc。
另起窗口,檢查版本:
# g++ --version
g++ (GCC) 4.8.3
#>ldd /opt/ace/ACE_wrappers/lib/libACE.so
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fdd34fd6000)
libm.so.6 => /lib64/libm.so.6 (0x00007fdd34d51000)
libgcc_s.so.1 => /opt/gcc/lib64/libgcc_s.so.1 (0x00007fdd34b3b000)
libc.so.6 => /lib64/libc.so.6 (0x00007fdd347a7000)
#>strings /usr/lib64/libstdc++.so.6.0.13 | grep GLIBGLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.4
GLIBC_2.3.2
確實沒有看到GLIBCXX_3.4.15
再觀察系統lib與lib64下stdc++的文件信息發現,64位目錄下的版本libstdc++.so.6.0.13,而32位目錄下倒是libstdc++.so.6.0.18,
以下圖:
lrwxrwxrwx 1 root root 28 7月 8 10:16 /usr/lib/libstdc++.so.6 -> /usr/lib/libstdc++.so.6.0.18
-rwxr-xr-x 1 root root 6472115 7月 8 10:16 /usr/lib/libstdc++.so.6.0.18
[root@localhost SignalDistServerMC]# ll /usr/lib64/libstdc++.so.6*
lrwxrwxrwx 1 root root 19 7月 8 12:42 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.13
-rwxr-xr-x. 1 root root 989840 11月 22 2013 /usr/lib64/libstdc++.so.6.0.13
解決方案:
從上面的狀況分析看,是由於ACE在尋找依賴庫的時候找到了/usr/lib64/libstdc++.so.6,但這個版本比較低爲libstdc++.so.6.0.13版本,找不到接口因此報錯。能夠更改庫的軟連接,使其指向高版本庫:ln -sf /usr/lib64/libstdc++.so.6 /usr/lib/libstdc++.so.6.0.18