最近两天,学习了一下PHP c++扩展的开发流程。 中间遇到不少坑,特此记录。
创建一个mongo_cpp扩展
1. 创建扩展的目录
#cd php-5.3.6/ext
#./ext_skel --extname=hello
2.编辑config.m4
放开一下内容:
PHP_ARG_ENABLE(hello, whether to enable hello support,
Make sure that the comment is aligned:
[ --enable-hello Enable hello support])
还要添加一下内容:
PHP_REQUIRE_CXX()
PHP_SUBST(MONGO_CPP_SHARED_LIBADD)
PHP_ADD_LIBRARY(stdc++, 1, MONGO_CPP_SHARED_LIBADD)
PHP_NEW_EXTENSION(mongo_cpp, mongo_cpp.cpp, $ext_shared)
3.生成configure和makefile
#/xxxx/php/bin/phpize
#./configure --with-php-config=/usr/local/php5/bin/php-config
4. 编辑Makefile
修改INCLUDE和LDFLAG,还要添加除mongo_cpp.cpp外其他cpp的编辑任务,并添加到shared_objects_mongo_cpp;
编译过程可能还需要-fPIC
5. 在php_mongo_cpp.h中使用宏声明函数
6. 在mongo_cpp.cpp中 先在入口函数中注册所有添加的函数; 再在文件最后部分添加函数的定义。
7.. sudo make ; sudo make install;
至此/usr/local/php5/lib/php/extensions/no-debug-non-zts-20100525/下有了mongo_cpp.so
8. 在php.ini中添加extention
9. 如果生成mongo_cpp.so中用到了其他so(即使用的是.a,本人不理解为什么),执行前,要添加其路径到LD_LIBRARY_PATH.
10. 扩展中的一些宏函数也要查资料,此处不叙述。