在Windows php扩展版本

时间:2015-10-30 19:32:13

标签: php c++ windows dll

我正在为一个库编写一个php扩展。我有一个通用的swig文件来为库构建包装器。到目前为止,这在Python上非常成功。

用户正在尝试为php构建库,我正在尝试帮助。我使用swig生成代码,我可以使用Visual Studio构建.dll扩展。问题是将它变成php。当我构建php_mylib.dll时,它需要找到mylib.dll而它不能。

所以我试图通过命令行构建一个la: http://blog.benoitblanchon.fr/build-php-extension-on-windows/

我已将所有要编译的文件和所需的库(即mylib64.lib和mylib64.dll)放在C:\ php-src \ ext文件夹中名为mylib的文件夹中,其中包含所有其他扩展文件夹。< / p>

问题是我无法获取config.w32文件来传达mylib的位置。这是我的config.w32文件(非常标准 - 你可以看到我从curl config.w32文件中复制了它):

// $Id$
// vim:ft=javascript

ARG_ENABLE("mylib", "mylib support", "no");

if (PHP_MYLIB != "no") {
    if (CHECK_LIB("mylib64.lib", "mylib", PHP_MYLIB) &&
            CHECK_HEADER_ADD_INCLUDE("mylib_cpp.h", "CFLAGS_MYLIB")
        ) {
        EXTENSION("mylib", "mylib_c_wrap.cpp", true);
        AC_DEFINE('HAVE_MYLIB', 1, 'Have mylib library');

        // TODO: check for curl_version_info
    } else {
        WARNING("mylib not enabled; libraries and headers not found");
    }
}

当我运行buildconf然后configure --disable-all --enable-cli --enable-mylib时,它总是会向我发送脚本中的'找不到的库和标题'警告。

在Unix系统(config.m4)上似乎有一个PHP_ADD_LIBRARY_WITH_PATH宏,但我没有看到任何等效的Windows。这似乎是我需要的。

我也尝试将mylib的完整路径添加到系统的路径中,但无济于事。似乎PHP构建宇宙中可能存在一个环境变量,需要设置它来查找外部依赖项,但我找不到任何有关此内容的信息。

将所有这些作为Visual Studio项目完成也是一件好事 - 对全世界的Windows用户来说都更容易。我没有在网上看到任何看起来像这样的东西。

顺便说一下,我已经在Linux上使用相同的swig + phpize程序成功地对这个库进行了php化(我按照PHP指南的这个指南进行了操作:http://www.sitepoint.com/install-php-extensions-source/)并且它工作得非常好。

1 个答案:

答案 0 :(得分:0)

在大多数情况下,您可以使用此信息构建PECL扩展https://wiki.php.net/internals/windows/stepbystepbuild#building_pecl_extensions。你的config.w32看起来不错,但请注意,当依赖于一些额外的库时,通常它应该是ARG_WITH(...)用于语义。然后可以将你的lib内容放入deps目录中,就像在wiki中一样。

另一种方法可能是传递--with-extra-libs和--with-extra-includes来配置。那些必须分别包含* .lib和* .h dirs的路径。当使用静态库时,应该是它,否则你需要将相应的* .dll放在%path%上,以使ext工作。

希望这会有所帮助,否则您也可以在PHP邮件列表上获得一些关注,或者特别关注freenode上的#winphp-dev。

感谢。