首页 > 编程语言 >编译PHP 7.3扩展引入自定义的C++库

编译PHP 7.3扩展引入自定义的C++库

时间:2023-03-01 10:36:12浏览次数:50  
标签:php 自定义 编译 C++ 7.3 cpp TEST test PHP

这里以mac为例,linux环境也是类似的。这里只是粗略的修改及编译过程,不会有太多详细过程。

https://www.php.net/downloads或者https://github.com/php/php-src/releases下载php 7.3.0的源码,然后解压到文件夹里面

打开终端,输入

cd 源码路径/ext
php ./ext_skel.php --ext test(插件名)

这里已经在ext目录下创建了test扩展项目.

要引入我们自己的C++库文件,当然要编译出这个库文件。这里我简单的写下编译过程,详细的网上很多,我的C++代码放在bridge目录下,编译的库名字是libmytest,下面是makefile文件

CC=g++ 
CFLAGS = -Wall -fPIC # -fPIC在linux一定要加上,不然会报错的
DEFINE =
INCLUDE = -I./
SOURCES = $(wildcard *.cpp)
OBJS = $(patsubst %.cpp,%.o,$(SOURCES))
 
TARGET = libmytest # 库名

build:
    $(CC) $(CFLAGS) -c $(SOURCES) 
    ar cru $(TARGET).a $(OBJS) 

clean:  
    rm -f $(OBJS)
    rm -f $(TARGET)

在终端输入

cd bridge路径
make

如果没有错,将会编译出libmytest.a的文件

我们把test扩展的test.c文件名改成test.cpp,修改config.m4

PHP_ARG_ENABLE(test, whether to enable test support,
[  --enable-test          Enable test support], no)

if test "$PHP_TEST" != "no"; then
  PHP_REQUIRE_CXX()
  PHP_SUBST(TEST_SHARED_LIBADD)
  PHP_ADD_INCLUDE(./bridge/)
  PHP_ADD_LIBRARY(stdc++, 1, TEST_SHARED_LIBADD)
  PHP_ADD_LIBRARY_WITH_PATH(mytest, ./bridge/, TEST_SHARED_LIBADD)

  AC_DEFINE(HAVE_TEST, 1, [ Have test support ])

  PHP_NEW_EXTENSION(test, test.cpp, $ext_shared)
fi

在test扩展的目录,终端输入

phpize

这时能看到生成了configure文件,我们打开这个文件,把里面所有的test.c修改成test.cpp,这时我们在test.cpp里面按平时调用的方式调用就好了。

下面我们编译test扩展

./configure --with-php-config=php-config路径
make & make install

没有出错的话,会安装到扩展目录,去php.ini开启这个扩展就好了

标签:php,自定义,编译,C++,7.3,cpp,TEST,test,PHP
From: https://www.cnblogs.com/opbye/p/17167178.html

相关文章

  • mybatis:自定义映射关系resultMap
    创建表t_emp定义实体类packageorg.example.entity;publicclassEmp{privateIntegerempId;privateStringempName;privateIntegerage;pr......
  • 自定义异常
    自定义异常packagecom.andy.base.exception.demo01.demo02;//自定义的异常类publicclassMyExceptionextendsException{//传递数字>10;privateintde......
  • 排序算法(C++实现)
    1、排序算法总结时间复杂度空间复杂度稳定性原地排序直接插入排序O(n2)O(1)√√折半插入排序O(n2)O(1)√√希尔排序最坏O(n2)O(1)×√......
  • visual studio C++调试出现 无法启动....... 拒绝访问
    Visualstudio 调试C++控制台程序,出现无法启动。。。拒绝访问原因竟然是360安全卫士导致的,关闭后就可以启动了......
  • C++for循环新用法
    1、拷贝range的元素时,使用for(autox:range).2、修改range的元素时,使用for(auto&x:range).3、只读range的元素时,使用for(constauto&x:range).#include<iost......
  • C++刷题笔记
    初始化string数组stringnumbers[12]={{"1"},{"2"},{"10"},{"11"},{"23"},{"25"},{"31"},{"36"},{"37"},{"102"},{"325"},{"438"}};填充for(in......
  • C++substr()函数
    C++中substr函数有三种用法,如下所示:假设strings(“student12”);stringx=s.substr()//默认时的长度为从开始位置到尾stringy=s.substr(5)......
  • C++string大小写转换
    #include<iostream>#include<string>#include<algorithm>usingnamespacestd;intmain(){stringstr="ancdANDG";cout<<"转换前的字符串:"<<str......
  • C++里的memset
    memset函数是内存赋值函数,用来给某一块内存空间进行赋值的;包含在<string.h>头文件中,可以用它对一片内存空间逐字节进行初始化;原型为:void*memset(void*s,intv,......
  • C++
                   ......