编译PHP扩展的方式
编译的两种方式其实很简单,这里记录只是为了以后遇到这种情况时不加思索地运用上,而不是花费一些时间去回忆。
C/C++程序编译有两种方式:动态编译、静态编译。PHP 是使用 C/C++程序开发的一门脚本语言,其扩展编译也就脱离不了前面提到的两种,动态、静态。站在PHP程序的角度,动态编译就是扩展生成一个 .so 文件,然后在 php.ini 中加载这个 .so 文件,此时即可调用其中的函数或者是类方法;静态编译就是在安装 PHP 时把其扩展文件内容编译到 PHP 内部,然后不需要做任何事情,就可以直接调用其中的函数或者还是类方法。这二者有什么优缺点呢?采用静态编译方式,程序在调用其函数/类方法时要快一些;采用动态编译方式,在有新扩展需要添加到PHP中时不需要重新编译PHP,只需要编译该扩展下的文件,然后把 .so 文件引入即可。二者均有利弊,使用时视情况而定是最好的方法。下面用Linux 平台下的操作来说明其编译过程。
第一种,动态编译
1. 在php.net 下载PHP源程序,然后使用其中的扩展骨架生成一个简单的扩展
cd php-5.3.24/ext #进入到 php 扩展程序目录 ./ext_skel --extname=simplecache #生成一个名为simplecache的扩展,也就是在此目录下新增了一个目录 simplecache
2. 修改此扩展配置文件 config.m4
dnl PHP_ARG_ENABLE(simplecache, whether to enable simplecache support, dnl Make sure that the comment is aligned: dnl [ --enable-simplecache Enable simplecache support]) 修改为: PHP_ARG_ENABLE(simplecache, whether to enable simplecache support, dnl Make sure that the comment is aligned: [ --enable-simplecache Enable simplecache support])
3. 开始编译
/usr/local/php-5.3/bin/phpize ./configure --with-php-config=/usr/local/php-5.3/bin/php-config make
注:/usr/local/php-5.3/ 是提前使用上面下载到的源程序安装好的PHP目录,里面包含一些可执行文件( php phpize php-config)
此时在 simplecache/modules 目录里就会生成 simplecache.so。
4. 配置
把上一步生成的 simplecache.so 放到 /usr/loca/php-5.3/ext/ 中,在 php.ini 文件引入此文件。
第二种,静态编译
1. 下载php源程序,生成扩展,如上。
2. 修改扩展配置文件 config.m4,如上。
3. 重新生成php程序目录下的 configure 文件
cd php-5.3.24 rm configure ./buildconf --force
4. 重新安装php
./configure --prefix=/usr/local/php --enable-simplecache make make install
备注:
1. 创建扩展过程其实可以省去,如果非必须。这里只是顺便记录,让这个编译工程更透明,容易理解。
2. 扩展配置文件 config.m4中的 --enable-extname / --with-extname 这两项究竟该使用哪中呢?取决于扩展库,通常不需要外部库文件的扩展库使用 --enable 。