1.error: command 'gcc' failed with exit status 1
今夜在CentOS release 6.9 和Python 2.7.3環(huán)境下,從源碼安裝pyltp缀辩,代碼如下:
$ git clone https://github.com/HIT-SCIR/pyltp
$ git submodule init
$ git submodule update
$ python setup.py install # Mac系統(tǒng)出現(xiàn)版本問題使用 MACOSX_DEPLOYMENT_TARGET=10.7 python setup.py install
安裝到最后一行:$ python setup.py install
報錯:error: command 'gcc' failed with exit status 1
學習了CentOS6.5升級手動安裝GCC4.8.2發(fā)現(xiàn)是系統(tǒng)自帶的gcc(4.4.7) 版本太老所致臀玄,不能支持C++11的特性畅蹂,要升級到4.8.2液斜,以下是正確操作。
1.1獲取安裝包并解壓
wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.2/gcc-4.8.2.tar.bz2
tar -jxvf gcc-4.8.2.tar.bz2
此外臼膏,http://ftp.gnu.org/gnu/gcc 里面有所有的gcc版本供下載示损。
1.2 下載供編譯需求的依賴項
參考文獻Linux升級GCC 4.8.1清晰簡明教程(Ubuntu 12.04 64位版為例)中說:這個神奇的腳本文件會幫我們下載检访、配置、安裝依賴庫医清,可以節(jié)約我們大量的時間和精力丹禀。
cd gcc-4.8.0
./contrib/download_prerequisites
1.3建立一個目錄供編譯出的文件存放
mkdir gcc-build-4.8.2
cd gcc-build-4.8.2
1.4 生成Makefile文件
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
1.5 編譯(注意:此步驟非常耗時)
make -j4
-j4選項是make對多核處理器的優(yōu)化双泪,如果不成功請使用 make,相關優(yōu)化選項可以移步至參考文獻Ubuntu下Vim+GCC+GDB安裝及使用葫盼。
1.6村斟、安裝
sudo make install
驗證安裝
重啟抛猫,然后查看gcc版本:
gcc -v
如下圖安裝成功
2. ImportError: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by /usr/local/lib/python2.7/site-packages/pyltp-0.2.1-py2.7-linux-x86_64.egg/pyltp.so)
運行pyltp程序時報錯:
ImportError: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found
(required by /usr/local/lib/python2.7/site-packages/pyltp-0.2.1-py2.7-linux-x86_64.egg/pyltp.so)
學習Linux下GLIBCXX和GLIBC版本低造成的編譯錯誤的解決方案后發(fā)現(xiàn)是一個是關于C++的系統(tǒng)版本庫libstdc++版本過低的問題。
1.1首先查看錯誤信息提示中的lib文件的信息
$ strings /usr/lib64/libstdc++.so.6 | grep GLIBC
這里是打印 libstdc++.so.6的輸出信息中限定(grep) GLIBC庫的信息败匹,查看當前GLIBCXX版本結果如圖所示:
確實比較舊了讥巡,那么我們有新版本么?我們安裝了gcc 4.8.0槽棍,按理說應該已經裝了新版的libstdC++.,如果沒有抬驴,可以去網上下一個。
先在本機找:
find / -name libstdc++.so.6*
結果如圖所示:
我們發(fā)現(xiàn)特石,gcc安裝時把/libstdc++.so.6.0.18 安裝到了/usr/local/lib64下姆蘸,但并沒有改變libstdc++.so.6的鏈接指向芙委。那么我們手動來更新軟鏈接(也可以直接指向/usr/local下的文件,不用拷貝推捐, 看各自的文件管理習慣)
$ cp /usr/local/lib64/libstdc++.so.6.0.18 /usr/lib64
$ rm -rf /usr/lib64/libstdc++.so.6
$ ln -s /usr/lib64/libstdc++.so.6.0.18 /usr/lib64/libstdc++.so.6
$ strings /usr/lib64/libstdc++.so.6 | grep GLIBC
然后更新成功牛柒,結果如下圖:
此時再運行.py文件痊乾,GLIBCXX的問題沒有了哪审。