天天看點

CentOS 6.8 更新gcc

CentOS 6.8預設的gcc是4.4.7,需要将gcc更新到4.9,目前最新的是7.1,預設yum更新是無法更新到4.9的,這裡我手動更新到4.9.

<a href="https://s3.51cto.com/wyfs02/M00/9C/7F/wKioL1lxZK7TSnyzAAE66AVIkRA579.jpg" target="_blank"></a>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

<code>[root@localhost src]</code><code># wget </code>

<code>[root@localhost src]</code><code># wget http://gcc.skazkaforyou.com/releases/gcc-4.9.1/md5.sum</code>

<code>[root@localhost src]</code><code># md5sum gcc-4.9.1.tar.bz2 </code>

<code>fddf71348546af523353bd43d34919c1  gcc-4.9.1.</code><code>tar</code><code>.bz2</code>

<code>[root@localhost src]</code><code># cat md5.sum </code>

<code>b188a3c9be25ddbf36b4fa6f04aaafaa  gcc-4.9.1.</code><code>tar</code><code>.gz</code>

<code>b9fcbc7f54402170505ec0cde21d794f  sha512.</code><code>sum</code>

<code>[root@localhost src]</code><code># tar -jxvf gcc-4.9.1.tar.bz2</code>

<code>[root@localhost src]</code><code># cd gcc-4.9.1</code>

<code>#下面腳本會自動幫你下載下傳、配置、安裝所需要的依賴檔案和庫,gcc需要gmp、mpfr、mpc</code>

<code>[root@localhost gcc-4.9.1]</code><code># ./contrib/download_prerequisites </code>

<code>[root@localhost gcc-4.9.1]</code><code># rpm -qa | egrep "gmp|mpfr|mpc"</code>

<code>gmp-4.3.1-10.el6.x86_64</code>

<code>libmpcdec-1.2.6-6.1.el6.x86_64</code>

<code>mpfr-2.4.1-6.el6.x86_64</code>

<code>#建立輸出目錄并到目錄裡,将所有的中間檔案都放到該目錄,</code>

<code>[root@localhost gcc-4.9.1]</code><code># mkdir gcc-build </code>

<code>[root@localhost gcc-4.9.1]</code><code># cd gcc-build/</code>

<code>[root@localhost gcc-build]</code><code># ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib</code>

<code>[root@localhost gcc-build]</code><code># make</code>

<code>[root@localhost gcc-build]</code><code># make install</code>

–enable-languages表示你要讓你的gcc支援那些語言,

–disable-multilib不生成編譯為其他平台可執行代碼的交叉編譯器。如果不加該參數編譯時候會提示configure: error: I suspect your system does not have 32-bit developement libraries (libc and headers). If you have them, rerun configure with --enable-multilib. If you do not have them, and want to build a 64-bit-only compiler, rerun configure with --disable-multilib.

–disable-checking生成的編譯器在編譯過程中不做額外檢查,也可以使用–enable-checking=xxx來增加一些檢查;

make 非常耗時,我一台機器用了将近90分鐘

24

25

26

27

28

<code>#驗證:gcc -v;或者g++ -v</code>

<code>[root@localhost ~]</code><code># gcc -v</code>

<code>Using built-</code><code>in</code> <code>specs.</code>

<code>COLLECT_GCC=gcc</code>

<code>COLLECT_LTO_WRAPPER=</code><code>/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4</code><code>.9.1</code><code>/lto-wrapper</code>

<code>Target: x86_64-unknown-linux-gnu</code>

<code>Configured with: ..</code><code>/configure</code> <code>--</code><code>enable</code><code>-checking=release --</code><code>enable</code><code>-languages=c,c++ --disable-multilib</code>

<code>Thread model: posix</code>

<code>gcc version 4.9.1 (GCC) </code>

<code>[root@localhost ~]</code><code># g++ -v</code>

<code>COLLECT_GCC=g++</code>

<code>[root@localhost gcc-build]</code><code># which gcc</code>

<code>/usr/local/bin/gcc</code>

<code>[root@localhost gcc-build]</code><code># /usr/local/bin/gcc -v</code>

<code>COLLECT_GCC=</code><code>/usr/local/bin/gcc</code>

<code>[root@localhost gcc-build]</code><code>#</code>

如果顯示的gcc版本仍是以前的版本需要重新連接配接或者重新開機,或者可以檢視gcc的安裝位置:which gcc;然後在檢視版本 /usr/local/bin/gcc -v,通常gcc都安裝在該處位置

GMP, MPFR, MPC這三個庫可以從ftp://gcc.gnu.org/pub/gcc/infrastructure/上下載下傳,也可以直接從各自官網上下載下傳: 

http://gmplib.org/

http://www.mpfr.org/

http://www.multiprecision.org/

1、安裝GMP

MPFR和MPC都依賴于GMP包,是以首先安裝GMP

<code>[root@localhost src]</code><code># wget ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2</code>

<code>[root@localhost src]</code><code># tar jxvf gmp-4.3.2.tar.bz2 </code>

<code>[root@localhost gmp-4.3.2]</code><code># ./configure &amp;&amp; make &amp;&amp; make install</code>

可以使用配置參數--prefix=指定安裝位置,這裡使用預設/usr/local/include和/usr/local/lib

2、安裝MPFR

<code>[root@localhost src]</code><code># wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2</code>

<code>[root@localhost src]</code><code># tar -jxvf mpfr-2.4.2.tar.bz2</code>

<code>[root@localhost src]</code><code># cd mpfr-2.4.2</code>

<code>[root@localhost mpfr-2.4.2]</code><code># ./configure --with-gmp-include=/usr/local/include --with-gmp-lib=/usr/local/lib</code>

<code>[root@localhost mpfr-2.4.2]</code><code># make &amp;&amp; make install</code>

3、安裝MPC

<code>[root@localhost src]</code><code># tar -zxvf mpc-0.8.1.tar.gz </code>

<code>[root@localhost mpc-0.8.1]</code><code># ./configure --with-gmp-include=/usr/local/include --with-gmp-lib=/usr/local/lib</code>

<code>[root@localhost mpc-0.8.1]</code><code># make &amp;&amp; make install</code>

都是安裝在預設位置/usr/local/include和/usr/local/lib,為了防止GCC編譯時找不到這三個庫,需要确認庫位置是否在環境變量LD_LIBRARY_PATH中,

<code>[root@localhost mpc-0.8.1]</code><code># echo $LD_LIBRARY_PATH</code>

<code>[root@localhost mpc-0.8.1]</code><code># vim /etc/profile</code>

<code>export</code> <code>LD_LIBRARY_PATH=$LD_LIBRARY_PATH:</code><code>/usr/local/lib64</code>

<code>[root@localhost mpc-0.8.1]</code><code># source !$</code>

<code>source</code> <code>/etc/profile</code>

<code>:</code><code>/usr/local/lib64</code>

<code>[root@localhost mpc-0.8.1]</code><code>#</code>

/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found

缺少GLIBCXX_3.4.15版本,或是更高的版本。

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

<code>[root@localhost mpc-0.8.1]</code><code># strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX</code>

<code>GLIBCXX_3.4</code>

<code>GLIBCXX_3.4.1</code>

<code>GLIBCXX_3.4.2</code>

<code>GLIBCXX_3.4.3</code>

<code>GLIBCXX_3.4.4</code>

<code>GLIBCXX_3.4.5</code>

<code>GLIBCXX_3.4.6</code>

<code>GLIBCXX_3.4.7</code>

<code>GLIBCXX_3.4.8</code>

<code>GLIBCXX_3.4.9</code>

<code>GLIBCXX_3.4.10</code>

<code>GLIBCXX_3.4.11</code>

<code>GLIBCXX_3.4.12</code>

<code>GLIBCXX_3.4.13</code>

<code>GLIBCXX_FORCE_NEW</code>

<code>GLIBCXX_DEBUG_MESSAGE_LENGTH</code>

<code>[root@localhost lib64]</code><code># ll /usr/lib64/libstdc++.so.6</code>

<code>lrwxrwxrwx 1 root root 19 Jul 21 13:38 </code><code>/usr/lib64/libstdc</code><code>++.so.6 -&gt; libstdc++.so.6.0.13</code>

<code>[root@localhost lib64]</code><code># strings /usr/local/lib64/libstdc++.so.6.0.20|grep -i GLIBCXX</code>

<code>GLIBCXX_3.4.14</code>

<code>GLIBCXX_3.4.15</code>

<code>GLIBCXX_3.4.16</code>

<code>GLIBCXX_3.4.17</code>

<code>GLIBCXX_3.4.18</code>

<code>GLIBCXX_3.4.19</code>

<code>GLIBCXX_3.4.20</code>

<code>[root@localhost</code>

如果gcc更新到了4.9一般不會出現該報錯,如果libstdc++.so.6.0.20有對應版本把這份軟鍊到正确的地方

<code>[root@localhost lib64]</code><code># cp /usr/local/lib64/libstdc++.so.6.0.20 /usr/lib64/</code>

<code>[root@localhost lib64]</code><code># rm -rf /usr/lib64/libstdc++.so.6</code>

<code>[root@localhost lib64]</code><code># ln -s /usr/lib64/libstdc++.so.6.0.20 /usr/lib64/libstdc++.so.6</code>

<code>[root@localhost lib64]</code><code># strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX</code>

<code>[root@localhost lib64]</code><code>#</code>

如果沒有libstdc++.so.6.0.20需要手動安裝libstdc++.so.6.0.14或者更高版本,

32位系統:http://ftp.de.debian.org/debian/pool/main/g/gcc-4.7/libstdc++6_4.7.2-5_i386.deb

64位系統:http://ftp.de.debian.org/debian/pool/main/g/gcc-4.7/libstdc++6_4.7.2-5_amd64.deb

<code>[root@localhost src]</code><code># ar -x libstdc++6_4.7.2-5_amd64.deb &amp;&amp; tar xvf data.tar.gz</code>

<code>[root@localhost src]</code><code># cd usr/lib/x86_64-linux-gnu/ </code>

<code>[root@localhost x86_64-linux-gnu]</code><code># cp libstdc++.so.6.0.17 /usr/lib64/</code>

<code>[root@localhost x86_64-linux-gnu]</code><code># rm -rf /usr/lib64/libstdc++.so.6</code>

<code>[root@localhost x86_64-linux-gnu]</code><code># ln /usr/lib64/libstdc++.so.6.0.17 /usr/lib64/libstdc++.so.6</code>

<code>[root@localhost x86_64-linux-gnu]</code><code># strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX</code>

<code>[root@localhost x86_64-linux-gnu]</code><code>#</code>

/usr/lib64/libc.so.6: version `GLIBC_2.14' not found

解決思路同上

<code>[root@localhost app]</code><code># ./redis startRedis Server [port 6979] is starting                       [ /app/redis6979/bin/redis-server: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /app/redis6979/bin/redis-server)</code>

<code>/app/redis6979/bin/redis-server</code><code>: </code><code>/lib64/libc</code><code>.so.6: version `GLIBC_2.17' not found (required by </code><code>/app/redis6979/bin/redis-server</code><code>)</code>

原因是系統的glibc版本太低,軟體編譯時使用了較高版本的glibc引起的

檢視系統glibc支援的版本:

<code>[root@localhost app]</code><code># strings /lib64/libc.so.6 |grep GLIBC_  </code>

<code>GLIBC_2.2.5</code>

<code>GLIBC_2.2.6</code>

<code>GLIBC_2.3</code>

<code>GLIBC_2.3.2</code>

<code>GLIBC_2.3.3</code>

<code>GLIBC_2.3.4</code>

<code>GLIBC_2.4</code>

<code>GLIBC_2.5</code>

<code>GLIBC_2.6</code>

<code>GLIBC_2.7</code>

<code>GLIBC_2.8</code>

<code>GLIBC_2.9</code>

<code>GLIBC_2.10</code>

<code>GLIBC_2.11</code>

<code>GLIBC_2.12</code>

<code>GLIBC_PRIVATE</code>

<code>[root@localhost app]</code><code># rpm -qa |grep glibc  </code>

<code>glibc-common-2.12-1.209.el6.x86_64</code>

<code>glibc-devel-2.12-1.209.el6.x86_64</code>

<code>glibc-headers-2.12-1.209.el6.x86_64</code>

<code>glibc-2.12-1.209.el6.x86_64</code>

<code>[root@localhost app]</code><code>#</code>

可以看到最高隻支援2.12版本,到http://www.gnu.org/software/libc/下載下傳最新版本

<a href="http://mirror.bjtu.edu.cn/gnu/libc/glibc-2.14.tar.xz" target="_blank">http://mirror.bjtu.edu.cn/gnu/libc/glibc-2.14.tar.xz</a>

http://mirror.bjtu.edu.cn/gnu/libc/glibc-2.17.tar.xz

<code>[root@localhost app]</code><code># tar xvf glibc-2.14.tar.xz </code>

<code>[root@localhost app]</code><code># cd glibc-2.14</code>

<code>[root@localhost glibc-2.14]</code><code># mkdir build</code>

<code>[root@localhost glibc-2.14]</code><code># cd build/</code>

<code>[root@localhost build]</code><code># ../configure --prefix=/app/glibc</code>

<code>[root@localhost build]</code><code># make -j4</code>

<code>[root@localhost build]</code><code># make install</code>

同上安裝glibc-2.17

最後加入環境變量

<code>[root@localhost app]</code><code># vim /etc/profile</code>

<code>export</code> <code>LD_LIBRARY_PATH=</code><code>/app/glibc/lib</code><code>:</code><code>/app/glibc2</code><code>.17</code><code>/lib</code><code>:$LD_LIBRARY_PATH</code>

<code>[root@localhost build]</code><code># source !$</code>

<code></code>

本文轉自 justin_peng 51CTO部落格,原文連結:http://blog.51cto.com/ityunwei2017/1949775,如需轉載請自行聯系原作者

繼續閱讀