Ubuntu 下php调用c语言.so文件

前端之家收集整理的这篇文章主要介绍了Ubuntu 下php调用c语言.so文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

写一个PHP模块(PHP extension),在调用该模块内的函数再通过该模块来调用so中的函数

首先做一个简单的文件

/**
*gcc -O -c -fPIC -o hello.o hello.c 
*gcc -shared -o libhello.so hello.o
*/
@H_301_51@int@H_301_51@int hello_add( a, b)
{
@H_301_51@return  a + b;
}

然后将它编译成.so文件并放到系统中:

$ Ogcc - -c -fPIC -o hello.o hello.c
$ gcc -shared -o libhello.so hello.o
su
# echo /usr/local/lib > /etc/ld.so.conf.d/local.conf 
# cp libhello.so /usr/local/lib
# /sbin/ldconfig

写段小程序来验证其正确性:

* hellotest.c
 * gcc -o hellotest -lhello hellotest.c
 */
#include <stdio.h>
@H_301_51@ main()
int34 a = ,b = ;
"%d + %d = %d\n" printf(@H_301_51@return0;
编译并执行:

gcc -o hellotest -lhello hellotest.c
./hellotest
47 +  = 

@H_301_51@经测试。在Ubuntu上无法通过编译,在Centos下正常编译,见下图,但是不影响后面的使用

下面我们制作PHP模块。首先确保安装了PHP5-dev

apt-get install PHP5-dev

然后下载代码。我使用的是PHP-5.2.3.tar.gz,解压缩。

$ wget http://eduunix.ccut.edu.cn/index2/PHP/PHP/PHP-5.3.6.tar.gz
$ 5.3.6tar xzvf PHP-.tar.gz
cd PHP-/ext

然后通过下面的命令建立一个名为hello的模块。

./ext_skel --extname=hello

执行该命令之后它会提示你应当用什么命令来编译模块,可惜那是将模块集成到内部的编译方法如果要编译成可动态加载的PHP_hello.so方法要更为简单。

cd hello

首先编辑config.m4文件,去掉第16行和第18行的注释(注释符号为dnl

16PHP_ARG_ENABLE(hello,whether to enable hello support,248)">:
17dnl Make sure that the comment is aligned:18[ --enable-hello Enable hello support]): 

后执行PHPize5程序,生成configure脚本:

PHPize5

然后打开PHP_hello.hPHP_FUNCTION(confirm_hello_compiled);之下加入函数声明:

/* For testing,remove later. */PHP_FUNCTION(confirm_hello_compiled);
PHP_FUNCTION(hello_add);

打开hello.cPHP_FE(confirm_hello_compiled,NULL)下方加入以下内容

zend_function_entry hello_functions[] = {
@H_301_51@NULL PHP_FE(confirm_hello_compiled,248)">) 
@H_301_51@ PHP_FE(hello_add,248)">NULL@H_301_51@/* Must be the last line in hello_functions[] */ {} 
};

然后在的最末尾书写hello_add函数内容

PHP_FUNCTION(hello_add)
long@H_301_51@@H_301_51@ result;
@H_301_51@if"ll" (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,&a,&b) == FAILURE) {
@H_301_51@}
 result = hello_add(a,b);
 RETURN_LONG(result);
保存退出,编译并安装:

./configure
LDFLAGSmake =-lhello
sudo make install 此命令会将so放在PHP的扩展文件

编辑配置文件加载

vim /etc/PHP5/apache2/PHP.ini
找到extension部分,加入extension=hello.so

/var/www/下建立一个hello.PHP文件内容如下:

@H_301_51@<?PHP
 @H_301_51@echo hello_add(3);
@H_301_51@?>

然后在浏览器中打开文件,如果显示7,则说明函数调用成功了。

http://www.jb51.cc/article/p-hgxgoyhw-bad.html

原文链接:https://www.f2er.com/ubuntu/355694.html

猜你在找的Ubuntu相关文章