【问题标题】:locating dependencies on windows php extension builds定位对 windows php 扩展构建的依赖关系
【发布时间】:2015-10-30 19:32:12
【问题描述】:

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

一个用户正在尝试为 php 构建库,我正在尝试提供帮助。我使用 swig 生成了代码,我可以使用 Visual Studio 构建 .dll 扩展。问题是将它放入 php.ini 文件中。当我构建php_mylib.dll时,它需要找到mylib.dll,它不能。

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

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

问题是我无法获取 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 构建 cosmos 中的某处可能需要设置一个环境变量以查找外部依赖项,但我找不到有关此的任何信息。

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

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

【问题讨论】:

    标签: php c++ windows dll


    【解决方案1】:

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

    另一种方法是通过 --with-extra-libs 和 --with-extra-includes 进行配置。这些必须分别包含到 *.lib 和 *.h 目录的路径。使用静态库时,应该是这样,否则您需要将相应的 *.dll 放在 %path% 上才能使 ext 工作。

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

    谢谢。

    【讨论】:

      猜你喜欢
      • 2017-07-01
      • 2020-03-10
      • 2010-11-20
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 2019-12-05
      • 2012-12-23
      • 2019-11-11
      相关资源
      最近更新 更多