LINUX下PHP生成并调用C的.so文件
来源:互联网 发布:兄弟连java入门 编辑:程序博客网 时间:2024/04/30 04:10
1,安装PHP环境到/usr/local/php
2,进入源码包cd /usr/local/php-5.5.3
3,建立要生成的.so文件的扩展骨架
cd /usr/local/php-5.5.3
./ext_skel --extname=test
test就是你要生成的.so的名字,例如test.so
4,修改配置文件/test/config.m4
取消下面两行的dnl注释,即去掉dnl
PHP_ARG_ENABLE(test, whether to enable test support,dnl Make sure that the comment is aligned:[ --enable-test Enable test support])
如果说使用C++ 进行编译,那么要将test.c改为test.cpp,并在/test/config.m4中加入一下(如果不是C++,则不需要)
PHP_REQUIRE_CXX() PHP_ADD_LIBRARY(stdc++, 1, EXTRA_LDFLAGS)PHP_NEW_EXTENSION(test, test.cpp, $ext_shared)
5,修改php_test.h中的代码,加入自定义函数的声明
PHP_MINIT_FUNCTION(test);PHP_MSHUTDOWN_FUNCTION(test);PHP_RINIT_FUNCTION(test);PHP_RSHUTDOWN_FUNCTION(test);PHP_MINFO_FUNCTION(test);PHP_FUNCTION(confirm_test_compiled);/* For testing, remove later. */PHP_FUNCTION(testFunc);
6,在test.c(test.cpp)中加入自定义函数代码:
(1)在该位置引入用到的头文件
#ifdef HAVE_CONFIG_H#include "config.h"#endif#include <stdio.h>#include <string.h>#include <math.h>#include "php.h"#include "php_ini.h"#include "ext/standard/info.h"#include "php_test.h"
(2)在该位置加入函数入口
const zend_function_entry test_functions[] = {PHP_FE(confirm_test_compiled, NULL)/* For testing, remove later. */PHP_FE(testFunc, NULL)PHP_FE_END/* Must be the last line in test_functions[] */};
(3)在文件尾部添加函数代码,也可以在这里定义其他函数
PHP_FUNCTION(testFunc) { char *x = NULL; char *y = NULL; int argc = ZEND_NUM_ARGS(); int x_len; int y_len; if (zend_parse_parameters(argc TSRMLS_CC, "ss", &x, &x_len, &y, &y_len) == FAILURE) return; int result_length = x_len + y_len; char* result = (char *) emalloc(result_length + 1); strcpy(result, x); strcat(result, y); RETURN_STRINGL(result, result_length, 0); } 7,建立扩展模块,直接输入以下/usr/local/php/bin/phpize(/usr/local/php是php的安装路径,这个要看你安在哪了,但建议软件都安装在/usr/local下)8,如下./configure --with-php-config=/usr/local/php/bin/php-config (/usr/local/php/bin/php-config是你安装的php的路径)makemake install说明一下,如果make出错,改好后继续make;如果make install 出错,需要执行make clean 和/usr/local/php/bin/phpize --clean9,查看test.so是否生成make insall成功后会给出路径一般放在:/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/test.so*************************************************以上就生成.so文件了***********************分割线********************************************************************************************************下面讲解如何调用很简单修改php.ini文件/usr/local/lib/php.ini(这个路径都不大相同,具体要看你放在哪了,如果找不到,那么去根目录下执行这条指令find -name php.ini)extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/"extension = "teste.so"之后重启php或者apache即可**********************************************以上内容就完成了**********************************************分割线************************************************************************************************************************下面补充一个过程中可能会出现的错误:autoconf有关的错误解决如下:yum list autoconf*之后会列出几个版本,选择最高版本的安装,比如说2.59yum install autoconf259成功之后需要配置环境变量:export PHP_AUTOCONF=/usr/bin/autoconf-2.59export PHP_AUTOHEADER=/usr/bin/autoheader-2.59完!
0 0
- LINUX下PHP生成并调用C的.so文件
- php调用C语言生成的so文件
- mac下lua调用c生成的so文件
- Java在linux下调用C/C++生成的so文件
- Java在linux下调用C/C++生成的so文件
- Linux下gcc编译生成动态链接库*.so文件并调用它
- Linux下gcc编译生成动态链接库*.so文件并调用它
- Linux下gcc编译生成动态链接库*.so文件并调用它
- Linux下gcc编译生成动态链接库*.so文件并调用它
- Linux下gcc编译生成动态链接库*.so文件并调用它
- Linux下gcc编译生成动态链接库*.so文件并调用它
- Linux下gcc编译生成动态链接库*.so文件并调用它
- Linux下gcc编译生成动态链接库*.so文件并调用它
- Linux下gcc编译生成动态链接库*.so文件并调用它
- Linux下gcc编译生成动态链接库*.so文件并调用它
- Linux下gcc编译生成动态链接库*.so文件并调用它
- Linux下gcc编译生成动态链接库*.so文件并调用它
- Linux下gcc编译生成动态链接库*.so文件并调用它
- FLV文件格式解析
- 【c#】最小化到托盘DefWndProc接收不到消息事件
- JS、JQ、FancyZoom 插件,分别实现兼容IE和火狐图片缩小放大
- SpringBoot常用配置
- 畸变(Distortion)
- LINUX下PHP生成并调用C的.so文件
- ActiveMQ实现负载均衡+高可用部署方案
- Android开源项目推荐之【Luban(鲁班)】--可能是最接近微信朋友圈的图片压缩算法
- iOS 关于字符串中是否包含某字符
- Log4j简单配置
- 也说Java文件路径
- 操作系统概念 -第七版-重要概念的理解-(1-22)
- Java实现简单的RPC框架
- OpenGL 全屏抗锯齿解决场景闪烁问题