我正在尝试编译适用于 Windows 的 php 8.3.6 x64 的共享扩展 我基本上遵循了这些说明:https://ourcodeworld.com/articles/read/804/how-to-compile-a-php-extension-dll-file-in-windows-with-visual-studio#disqus_thread
问题:
PHP Warning: PHP Startup: Unable to load dynamic library 'php_mailparse.dll' (tried: ./ext\php_mailparse.dll (Die angegebene Prozedur wurde nicht gefunden)) in Unknown on line 0
那么我做了什么:
configure --disable-all --enable-cli --enable-mbstring --enable-mailparse --disable-zts --with-all-shared
输出:-----------------------
| Extension | Mode |
-----------------------
...
| mailparse | shared |
...
-----------------------
Enabled SAPI:
-------------
| Sapi Name |
-------------
| cli |
-------------
-----------------------------------------
| Build type | Release |
| Thread Safety | No |
| Compiler | Visual C++ 2019 |
| Target Architecture | x64 |
| Host Architecture | x64 |
| Optimization | PGO disabled |
| Native intrinsics | SSE2 |
| Static analyzer | disabled |
-----------------------------------------
现在在 php-sdk\x64\Release 中我发现了一个 php_mailparse.dll, [编辑]并将其复制到预编译的 php 二进制文件的 ext 文件夹中,[/编辑]但是这个 dll 给了我在开头写的错误......有人知道我做错了什么吗?
感谢@shingo和一个小实验,我让它工作了,正如@shingo在他的评论中发布的那样将共享的php模块编译为dll(windows)我已经根据https://wiki的说明完成了以下操作.php.net/internals/windows/stepbystepbuild_sdk_2#building_pecl_extensions
我已经安装了包含以下组件的 Visual Studio Community 2019(我不知道真正需要哪一个,只是很高兴它总体上有效 ^^)
- MSVC v142 - VS 2019 C++ -x64/x86Buildtools
- Windows 10 SDK
- 即时调试器
- C++-分析工具
- C++-CMake-Windows 工具
- C++ 地址消毒器
现在:
创建文件夹C:\php-sdk
将 php-source 提取到 C:\php-sdk (现在我的 php 源位于 C:\php-sdk\php-8.3.6-src)
将 php-sdk-binary-tools-master.zip\php-sdk-binary-tools-master 内容提取到 C:\php-sdk (这样对于 exmaple phpsdk-vs16-x64.bat 将位于 C:\ php-sdk)
进入 php-src-folder(在我的例子中为 C:\php-sdk\php-8.3.6-src)并创建一个文件夹“pecl”
将扩展名的src提取到C:\php-sdk\php-8.3.6-src\pecl(在我的例子中是mailparse,所以我有一个文件夹C:\php-sdk\php-8.3.6-src\pecl \pecl-mail-mailparse-master,但我将其重命名为 C:\php-sdk\php-8.3.6-src\pecl\mailparse)
现在打开命令提示符:
cd C:\php-sdk
phpsdk-vs16-x64.bat
cd php-8.3.6-src
buildconf
configure --disable-all --enable-cli --enable-mbstring=shared --enable-mailparse=shared --disable-zts
(--disable-zts因为我在iis下编译fastcgi,而且--enable-mbstring=shared也是必要的,因为mailparse依赖于mbstring,没有它,它不起作用)nmake
现在我将 php_mbstring.dll 和 php_mailparse.dll 从 C:\php-sdk\php-8.3.6-src\x64\Release 复制到我正在运行的预构建 php-binaries ext 文件夹的扩展文件夹,替换现有的 php_mbstring .dll 现在可以工作了;)