我正在为一个库编写一个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/)并且它工作得非常好。
答案 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。
感谢。