首页 » 编程语言 » PHP » PHP7扩展开发之使用静态库

PHP7扩展开发之使用静态库

前言

在本文,我们将建立一个简单的lib静态库,并在扩展中进行封装调用。

代码

基础代码

这个扩展,我们将在say扩展上增加show_site_ar()。say扩展相关代码大家请看这篇博文。PHP7扩展开发之hello word 文中已经详细介绍了如何创建一个扩展和提供了源码下载。

代码实现

建立lib库

增加hello.h文件。代码如下:

#ifndef TEST_HEADER_FILE
#define TEST_HEADER_FILE

#include <stdlib.h>
#include <string.h>

char * show_site(); 

#endif

增加hello.c文件。代码如下:

#include "hello.h"

char * show_site()
{
    char *site = malloc(15 * sizeof(char));
    strcpy(site, "www.bo56.com");
    return site;
}

然后使用以下命令生成lib库(动态库)文件:

$ gcc -c -o ./hello.o ./hello.c
$ ar -r hello.a hello.o

这样在当前目录下就会生成一个hello.so的动态库文件。不同操作系统动态库的扩展名可能不一样。如 windows下是dll,mac下是 dylib,linux下是so。

然后把ar -r hello.a hello.o拷贝到/usr/local/lib/目录下,命名为hello.a
hello.h拷贝到/usr/local/include/目录下。

修改config.m4文件

增加扩展对动态库的依赖。主要增加以下几行代码:

PHP_ADD_LIBRARY_WITH_PATH(hello, /usr/local/lib/, SAY_SHARED_LIBADD)
PHP_SUBST(SAY_SHARED_LIBADD)

修改Makefile文件

执行phpize命令后,会生成Makefile文件。修改文件如下:

SAY_SHARED_LIBADD = -Wl,-rpath,/usr/local/lib/ -L/usr/local/lib/ -lhello

修改为

SAY_SHARED_LIBADD = -Wl,-rpath,/usr/local/lib/ -L/usr/local/lib/ /usr/local/lib/hello.a

即,把-lhello修改为了具体的静态库路径。

编写扩展代码

增加hello.h的引用。

#include "php_say.h"
#include <stdio.h>
//下面这行是增加的
#include "hello.h"

增加show_site()方法。代码如下:

PHP_FUNCTION(show_site_ar)
{
	char *site = show_site();
	RETVAL_STRING(site);
	free(site);
	return;
}

php调用结果

<?php
$result = show_site_ar();
var_dump($result);
?>

执行结果

$php ./test.php
string(12) "www.bo56.com"

代码解读

PHP_ADD_LIBRARY_WITH_PATH 是用于指定lib库的名字,地址等信息。第一个参数是名字,第二个参数是地址。

在say.c文件中增加lib库的头文件。使用#include "hello.h"

在扩展代码中就像调用其他内核提供的方法一样,去调用lib库中的方法。

关于config.m4文件的说明请查看 http://php.net/manual/zh/internals2.buildsys.configunix.php

交流社区

技术交流

原文链接:PHP7扩展开发之使用静态库,转载请注明来源!

原文链接:PHP7扩展开发之使用静态库,转载请注明来源!

3