PHP8.0中的FFI扩展

PHP8.0中的FFI扩展:将各种语言的库集成到 PHP 中

一、安装gcc软件

1.windows安装MinGW
下载地址:https://osdn.dl.osdn.net/mingw/68260/mingw-get-setup.exe
点击【install】==》
选择保存路径,单选just for me,多选全勾,点击【continue】==》
等待加载选择点击【continue】==>
在弹出的界面,勾选 mingw32-base-bin 和 mingw32-gcc-g+±bin 两项==>
在菜单栏选择"Installation"下的"Apply Changes"选项,在弹出的对话框中,点击"Apply"按钮==>
等待下载安装完毕==>
安装完毕,点击"Close"关闭窗口;同时退出MinGW Installation Manager软件==>
将E:\MinGW\bin目录配置到环境变量Path中;

2.linux安装gcc 
yum install build-essential g++

3.代码测试
新建hello.c文件加入如下代码:
#include <stdio.h>

int main()
{
  printf("Hello world!");
  return 0;
}

4.执行:gcc hello.c 命令

E:\MinGW\bin>gcc hello.c -o hello
E:\MinGW\bin>hello.exe
Hello world!

E:\MinGW\bin>gcc -c hello.c //生成hello.o
E:\MinGW\bin>gcc -shared -fPIC hello.c -o hello.dll //生成hello.dll
E:\MinGW\bin>gcc -shared -fPIC hello.c -o hello.so //生成hello.so
E:\MinGW\bin>gcc hello.c -o hello  //生成hello.exe
E:\MinGW\bin>gcc hello.c -L. -lmyXso -o hello  //生成hello.exe
注意:-L编译时库搜索路径 -l库名 (库名不包含前缀lib和后缀.so)。运行时,提示找不到动态库,我们要把.so文件所在路径添加到环境变量LD_LIBRARY_PATH中。

5:安装成功

二:开启ffi扩展
extension=ffi
ffi.enable=true

三、编写C代码并将其编译为共享库
1、首先,我们需要编写一个简单的C函数来添加两个数,并将其编译成共享库。这个示例代码位于`sum.c`文件中。
代码如下:
#include <stdio.h>
int add(int a, int b) {
    return a + b;
}

2、然后,我们将使用GCC(GNU 编译器集合)来将代码编译成共享库。在终端中运行以下命令来编译代码
gcc -c sum.c
gcc -shared -o libsum.so sum.o
这将使用gcc编译器和`-c`标志来将源代码编译为目标文件,并使用`-shared`标志将文件打包在一起,形成`libsum.so`共享库

四、在PHP中使用FFI扩展加载共享库
接下来,我们需要在PHP8.0中使用FFI扩展来加载该共享库并调用其中的函数。我们将在`test.php`文件中进行操作
<?php 
方案一、
$lib_path = '<PATH>/libsum.so';//将<PATH>替换为库的实际路径
$ffi = FFI::cdef("int add(int a,int b);",$lib_path);
$c = $ffi->add(10, 5);
//输出结果
echo "10 + 5 = $c\n";

方案二、
$ffi = FFI::cdef("
    int add(int a, int b) {
        return a + b;
    }
");
$result = $ffi->add(10, 5);
//输出结果
var_dump($result);
 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值