PHP引用库动态,用VS开发PHP扩展,PHP调用C动态链接库

环境:

phpstudy2016

步骤:

请确保上述软件或文件都已配置。

打开文件...\PHP-5.3.29-src\ext\ ext_skel_win32.php修改cygwin的路径,如果是对的就不改。

b18d452e573d102657b4609b99529221.png

打开cmd命令行,进入路径...\PHP-5.3.29-src\ext,输入命令php ext_skel_win32.php --extname=test

生成扩展骨架,test即为php扩展名。该test文件夹位于...\PHP-5.3.29-src\ext

说明:下图为了展示成功的输出,故生成的扩展名为test_2,后续截图均使用test。

343295fa0ea35a9b7a50ee30cf806e5a.png

生成的扩展文件目录如下:

e9682727b1021b68c143142becbdeebc.png

打开VS2013, “文件”--“新建”--“从现有代码创建项目”--“C++” ,项目文件位置选择上面的test文件夹,项目名称phptest,“生成动态链接库dll项目”。

7ecf9e065c3d5788ddd889c64a34cf21.png

接下来开始配置我们的项目:

项目解决方案配置改为Release

项目 - 项目属性 - C/C++ - 常规 - 附加包含目录 - 添加如下内容(...全为自己的真实路径)

...\PHP-5.3.29-src

...\PHP-5.3.29-src\main

...\PHP-5.3.29-src\TSRM

...\PHP-5.3.29-src\Zend

项目 - 项目属性 - C/C++ - 预处理器 - 预处理器定义 - 添加如下内容

ZEND_DEBUG=0

PHP_EXTENSION

PHP_WIN32

ZEND_WIN32

HAVE_TEST=1(test要改成你的扩展名称)

COMPILE_DL_TEST(同上)

ZTS(这一个变量加上是开启线程安全,不加是关闭线程安全)

项目 - 项目属性 - 链接器 - 输入- 添加如下内容(注意是二进制目录不是源码目录)

...\php-5.3.29-Win32-VC9-x86\dev\php5ts.lib

打开文件...\PHP-5.3.29-src\main\ config.w32.h,添加#define PHP_COMPILER_ID "VC9" ,因为PHP-5.3.29是用VC9编译的,视自己情况修改(例如php5.6.9就是VC11编译的 )。

配置结束后点击生成解决方案,此时应该不会再报任何错误,接下来就是写我们的C函数。

需要两个文件分别为 test.c 和 phptest.h。

phptest.h种声明方法,该文件此处原为PHP_FUNCTION( confirm_test_compiled )

我将原本的测试函数改为test_echo,也就是上面说的 confirm_test_compiled 改为test_echo。

再新建一个方法名为hello。

ca46ba1c88544a49a420de124549a555.png

test.c中与头文件保持一致,上为声明,下为方法的实现。

4d7394de15f4e59934cbe21df83fdab6.png

4f51f84b8dede612661f7ef778266d09.png

此时再重新生成解决方案,在...\test\Release目录下找到 php_test.dll ,将该文件复制到PHP的ext文件夹(不是源码也不是二进制而是phpstudy的php文件夹)下。

a9307f73788056e6b95405aa9ad4e6db.png

大功告成,在任意站点里新建php文件进行测试。

echo test_echo("
123
");

echo ‘
‘;

echo hello();

09a562d4e661ca42d65413826b7faad5.png

至此,可以开始PHP扩展开发了。

原文:https://www.cnblogs.com/poziiey/p/13034780.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在信号处理领域,DOA(Direction of Arrival)估计是一项关键技术,主要用于确定多个信号源到达接收阵列的方向。本文将详细探讨三种ESPRIT(Estimation of Signal Parameters via Rotational Invariance Techniques)算法在DOA估计中的实现,以及它们在MATLAB环境中的具体应用。 ESPRIT算法是由Paul Kailath等人于1986年提出的,其核心思想是利用阵列数据的旋转不变性来估计信号源的角度。这种算法相比传统的 MUSIC(Multiple Signal Classification)算法具有较低的计算复杂度,且无需进行特征值分解,因此在实际应用中颇具优势。 1. 普通ESPRIT算法 普通ESPRIT算法分为两个主要步骤:构造等效旋转不变系统和估计角度。通过空间平移(如延时)构建两个子阵列,使得它们之间的关系具有旋转不变性。然后,通过对子阵列数据进行最小二乘拟合,可以得到信号源的角频率估计,进一步转换为DOA估计。 2. 常规ESPRIT算法实现 在描述中提到的`common_esprit_method1.m`和`common_esprit_method2.m`是两种不同的普通ESPRIT算法实现。它们可能在实现细节上略有差异,比如选择子阵列的方式、参数估计的策略等。MATLAB代码通常会包含预处理步骤(如数据归一化)、子阵列构造、旋转不变性矩阵的建立、最小二乘估计等部分。通过运行这两个文件,可以比较它们在估计精度和计算效率上的异同。 3. TLS_ESPRIT算法 TLS(Total Least Squares)ESPRIT是对普通ESPRIT的优化,它考虑了数据噪声的影响,提高了估计的稳健性。在TLS_ESPRIT算法中,不假设数据噪声是高斯白噪声,而是采用总最小二乘准则来拟合数据。这使得算法在噪声环境下表现更优。`TLS_esprit.m`文件应该包含了TLS_ESPRIT算法的完整实现,包括TLS估计的步骤和旋转不变性矩阵的改进处理。 在实际应用中,选择合适的ESPRIT变体取决于系统条件,例如噪声水平、信号质量以及计算资源。通过MATLAB实现,研究者和工程师可以方便地比较不同算法的效果,并根据需要进行调整和优化。同时,这些代码也为教学和学习DOA估计提供了一个直观的平台,有助于深入理解ESPRIT算法的工作原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值