【问题标题】:Compiling a php extension into a dll将php扩展编译成dll
【发布时间】:2013-05-14 14:28:18
【问题描述】:

过去几天我一直在尝试使用运算符重载扩展 (pecl.php.net/package/operator),该扩展最近显然已更新为与 5.3 和 5.4 兼容。

我尝试在 Windows(64 位 Windows 7)中使用 this guide 编译它,使用 PHP 5.4 和 Windows SDK 7.1 没有运气。因此,我尝试使用 PHP 5.3 和 Windows SDK 6.1 进行此操作,我可以使用配置“configure --disable-all --enable-cli --enable-operator”和“nmake”成功编译它。问题是它不会为操作员扩展生成 dll 文件,而是我得到的 is this,这对我来说显然没用。我想要的是一个可用于本地 WampServer 设置的 dll。

我在尝试使用 pecl.php.net 站点上的 operator-0.4.1 时遇到了致命错误,因此我从 git 存储库 (github.com/php/pecl-php-operator) 下载并编译,这就是产生 .obj、.idb 和 .sbr 文件的原因。

【问题讨论】:

    标签: php windows dll php-extension php-internals


    【解决方案1】:

    你必须这样做

    configure --disable-all --enable-cli --enable-operator=shared
    

    否则它是静态编译的。

    无论如何,如果您想将它与 WampServer 一起使用,二进制文件可能无法正常工作,因为如果我没记错的话,WampServer 是针对 VC10 C 运行时库编译的,而您链接到的指南指示您使用 Visual Studio 2008 (VC9 自带)。您需要使用 VC10 编译器(我认为它与 Windows SDK 7.1 捆绑在一起,因此您可以直接下载并跳过 Visual Studio)。

    【讨论】:

    • 我为自己的扩展尝试了上述方法,但它仍然会生成一个库。我正在使用 PHP 7.3 和 VC15。如何生成 DLL?
    【解决方案2】:

    进入扩展根路径,修改config.w32

    EXTENSION('redis', sources);to EXTENSION('redis', sources,true);

    buildconf --force
    
    configure --enable-xx 
    
    nmake
    

    你会得到php-redis.dll

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-08
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2016-03-22
      • 2017-03-21
      相关资源
      最近更新 更多