環境:
centos 6.5
php7.0
gcc 4.9
cmake 3.5.2
艱辛的過程
簡單介紹一下這個擴展,這個擴展是基於phpx的架構編寫的,稍微修改過源碼。p.s.由於源碼的編寫並沒有怎么參與,此處只介紹安裝過程中的坑。
首先,由於與開發環境不一致,很多工具的版本對不上,於是,需要各種升級。
1、gcc的升級
yum install gcc
yum install gcc-c++
wget http://gcc.skazkaforyou.com/releases/gcc-4.9.1/gcc-4.9.1.tar.gz tar -xf gcc-4.9.1.tar.gz cd gcc-4.9.1 ./contrib/download_prerequisites # 這個腳本會自動幫你下載所需要的依賴文件和庫 # 建立輸出目錄,將所有的中間文件都放到該目錄 mkdir gcc_temp cd gcc_temp ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib make & make install
這個過程很漫長。。。
2、cmake的升級
wget https://cmake.org/files/v3.5/cmake-3.5.2.tar.gz tar xvf cmake-3.5.2.tar.gz cd cmake-3.4.3 ./bootstrap --prefix=/usr #這一步很關鍵,如果沒有指定prefix,后面使用時會報錯Could not find CMAKE_ROOT make # 此處遇坑,下文開始解釋
make install
首先,由於上面gcc的安裝沒有指定安裝路徑,默認是/usr/local下,所以當執行到make步驟的時候提示:
The C compiler identification is unknown
此時,及時你設置了/etc/profile的PATH也會報同樣的錯誤,正確的方式是創建軟連接:
ln -s /usr/local/bin/gcc /usr/bin/gcc ln -s /usr/local/bin/c++ /usr/bin/c++ ln -s /usr/local/bin/g++ /usr/bin/g++
ln -s /usr/local/bin/gcc /usr/bin/cc # 此處的CC為后邊cmake自寫擴展時候用到的,其實就是指向了gcc
報錯提示2:
/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found
[root@localhost cmake-2.8.12.2]# 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_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
[root@localhost cmake-2.8.12.2]# strings /usr/local/lib64/libstdc++.so.6.0.20|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_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
這里該有的都有了,把這份軟鏈到正確的地方:
[root@localhost cmake-2.8.12.2]# cp /usr/local/lib64/libstdc++.so.6.0.20 /usr/lib64/
[root@localhost cmake-2.8.12.2]# cd /usr/lib64/
[root@localhost lib64]# rm -f libstdc++.so.6
[root@localhost lib64]# ln -s libstdc++.so.6.0.20 libstdc++.so.6
[root@localhost lib64]# ll libstdc*
lrwxrwxrwx. 1 root root 19 5月 12 13:34 libstdc++.so.6 -> libstdc++.so.6.0.20
-rwxr-xr-x. 1 root root 987096 11月 22 02:08 libstdc++.so.6.0.13
-rwxr-xr-x. 1 root root 6700716 5月 12 13:33 libstdc++.so.6.0.20
(轉)
至此,cmake可以成功安裝
3、安裝擴展
首先編譯安裝phpx
git clone https://github.com/swoole/PHP-X cd PHP-X cmake -DPHP_CONFIG_DIR=/usr/local/bin -DCMAKE_INSTALL_PREFIX=./output # 接下來報錯,后邊解釋。。。 make make install
由於編譯phpx的時候需要ccache支持,所以需要安裝cache,否則,cmake可以通過,但是make報錯
wget https://www.samba.org/ftp/ccache/ccache-3.3.4.tar.gz tar -zxf ccache-3.3.4.tar.gz cd ccache-3.3.4 ./configure --prefix=/usr make && make install
安裝完畢后,在make && make install就可以了
至此,標准流程安裝結束
4、自定義的php擴展安裝
這個安裝比較簡單了,由於在開發的時候把源碼已經打包成共享庫了(.so文件),此時只需要:
ldd 擴展.so 看下該共享文件所需的共享庫有沒有無效的,如果有無效的,就將其指向所需的添加到指向目錄。
最后,安裝完畢,php擴展正常運行。