In the past two days, I have studied the development process of PHP c++ extension. I encountered a lot of pitfalls in the process, which I will record here.
Create a mongo_cpp extension
1. Create the extension’s directory
#cd php-5.3.6/ext
#./ext_skel --extname=hello
2. Edit config.m4
Let go of the content:
PHP_ARG_ENABLE(hello, whether to enable hello support,
Make sure that the comment is aligned:
[ --enable-hello ] Enable hello support])
Also add something:
PHP_REQUIRE_CXX()
PHP_SUBST(MONGO_CPP_SHARED_LIBADD)
PHP_ADD_LI BRARY(stdc++, 1, MONGO_CPP_SHARED_LIBADD)
PHP_NEW_EXTENSION(mongo_cpp, mongo_cpp.cpp, $ext_shared)
3. Generate configure and makefile
#/xxxx/php/bin/phpize
#./configure --with-php-c/local/php5/bin/php-config
4. Edit Makefile
Modify INCLUDE and LDFLAG, and add mongo_cpp. cppOther cpp editing tasks and added to shared_objects_mongo_cpp;
The compilation process may also require -fPIC
5. Used in php_mongo_cpp.h Macro declaration function
6. In mongo_cpp.cpp
First register all the added functions in the entry function ; then add the function definition in the last part of the file.
7.. sudo make ; sudo make install;
So far, we have mongo_cpp.so under /usr/local/php5/lib/php/extensions/no-debug-non-zts-20100525/
8. If other so is used to generate mongo_cpp.so (even if .a is used, I don’t understand why), before execution, add its path to LD_LIBRARY_PATH.
9. Extension Some macro functions also need to be checked for information, which will not be described here.
The above introduces the development of PHP C++ extension, including PC and PHP content. I hope it will be helpful to friends who are interested in PHP tutorials.