【问题标题】:How do I compile a PHP extension with Microsoft Visual C++ 2008?如何使用 Microsoft Visual C++ 2008 编译 PHP 扩展?
【发布时间】:2011-06-21 22:03:36
【问题描述】:

我使用 Microsoft Visual C++ 2008 创建了一个 PHP Hello World 扩展 DLL。我拥有正确的 php.ini(我知道,因为当我启用和禁用 gd2 扩展时,会有 效果) ,但是当我加载扩展时,它不会在phpinfo() 的附加模块下弹出。

当我尝试测试函数(一个简单的double() 函数)时,它显然不起作用。我用this tutorial)。

如果有人可以提供他们在执行此操作时创建的 dll(以查看我的是否搞砸了或者它是否是我的服务器),那么我很乐意对其进行测试。

系统规格

操作系统:Windows (Vista)
服务器:WAMP
PHP:5.3.5(Xampp 和 IIS 也安装了)

当我运行命令 php --ini 时,我收到此错误:

PHP Startup: TalkPHP Extension: Unable to initalize module
Module compiled with build ID=API20090626, TS, VC9.
PHP   compiled with build IF=API20090626, TS, VC6.
These options need to match

这是否意味着我必须使用版本 9 来编译 PHP?

【问题讨论】:

  • 你的操作系统和网络服务器是什么?
  • 你重启了吗?您是否尝试通过 dl("yourext.dll"); 加载它?
  • 由于某种原因,当我启用 dl() 时,它说它已在 phpinfo() 中启用,但说它是我程序上未定义的函数
  • dl() 可能已添加到 disabled_functions 指令中。
  • @Orbling 很抱歉,这里已经很晚了(凌晨 3:30)。这是问题的正确链接:stackoverflow.com/questions/3641751/…

标签: php c++ dll php-extension php-internals


【解决方案1】:

VC9 和 VC6 版本不兼容。您要么必须使用 VC6 编译 DLL,要么从他们的 download page 获取使用 VC9 编译的 PHP 二进制文件。

如果您使用 Apache 和 mod_php,您还需要一个 VC9 版本的 Apache 来加载 VC9 PHP,您可以从 apachehaus.com 获得这些。

【讨论】:

    【解决方案2】:

    来自 cmets 的解决方案...

    -我找到了解决方案forums.zend.com/viewtopic.php?f=55&t=2045

    -可能重复:问题:stackoverflow.com/questions/3641751/

    我收到这些警告

    c:\wamp\bin\php\php-5.3.5src\zend\zend_build.h(19) : warning C4005: 'PHP_COMPILER_ID': macro redefinition c:\wamp\bin\php\php-5.3.5src\main\config.w32.h(189) : see previous definition of 'PHP_COMPILER_ID' 1>
    c:\wamp\bin\php\php-5.3.5src\main\config.w32.h(189) : warning C4005: 'PHP_COMPILER_ID' : macro redefinition 1> 
    c:\wamp\bin\php\php-5.3.5src\zend\zend_build.h(19) : see previous definition of'PHP_COMPILER_ID'
    

    我认为这与我的实际说是用 VC9 编译的事实有关,而在其他方面它什么都没有。 (它们是警告,但我认为这就是它不起作用的原因)

    好的,什么也没做,只是尝试了一下,但是当我运行扩展程序时,它工作了。我仍然从 php --ini 收到错误,但它运行并正常工作。

    【讨论】:

      【解决方案3】:

      我成功编译并运行了一个自定义 php 扩展。

      您可以尝试以下方法吗:

      • 从 php-5.3.5 获取 vc9 构建
      • 不要在 zend_build.h 头文件中#define PHP_COMPILER_ID(恕我直言,无论如何这都是个坏主意)
      • 您可能也在 config.w32.h 中定义了 PHP_COMPILER_ID;删除它
      • 在您的项目设置(C/C++ - 预处理器)中定义:PHP_COMPILER_ID=\"VC9\" (如果您需要 php 的 vc6 构建,那么我会尝试定义 PHP_COMPILER_ID=\"VC6\";我不知道这是否可以正常工作,但我使用了星座 [php-5.2.x vc6,自定义 php用 vc9 编译的扩展] 没有问题,永远)

      【讨论】:

        猜你喜欢
        • 2011-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-09
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        相关资源
        最近更新 更多