記一次自寫php擴展的安裝


環境:

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擴展正常運行。

 

 

 

 

 

 

 

 

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM