这里以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开启这个扩展就好了

发表评论

电子邮件地址不会被公开。 必填项已用*标注