首页 > 代码库 > 记一次自写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扩展的安装