【发布时间】: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/),它运行良好。
【问题讨论】: