首页 > 代码库 > 记一次自写php扩展的安装

记一次自写php扩展的安装

环境:

centos 6.5

php7.0

gcc 4.9

cmake 3.5.2

 

艰辛的过程

简单介绍一下这个扩展,这个扩展是基于phpx的架构编写的,稍微修改过源码。p.s.由于源码的编写并没有怎么参与,此处只介绍安装过程中的坑。

首先,由于环境不一致,开发的时候使用centos7,安装的时候在6.5,很多工具的版本对不上,于是,需要各种升级。

1、gcc的升级

# 卸载gcc
yum remove gcc

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扩展正常运行。

 

 

 

 

 

 

 

 

 

 

 

  

记一次自写php扩展的安装