将共享 php 模块编译为 dll (windows)

问题描述 投票:0回答:1

我正在尝试编译适用于 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

那么我做了什么:

-----------------------
| 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        |
-----------------------------------------
  • 运行nmake

现在在 php-sdk\x64\Release 中我发现了一个 php_mailparse.dll, [编辑]并将其复制到预编译的 php 二进制文件的 ext 文件夹中,[/编辑]但是这个 dll 给了我在开头写的错误......有人知道我做错了什么吗?

php windows php-extension
1个回答
0
投票

感谢@shingo和一个小实验,我让它工作了,正如@shingo在他的评论中发布的那样将共享的php模块编译为dll(windows)我已经根据https://wiki的说明完成了以下操作.php.net/internals/windows/stepbystepbuild_sdk_2#building_pecl_extensions

我已经安装了包含以下组件的 Visual Studio Community 2019(我不知道真正需要哪一个,只是很高兴它总体上有效 ^^)

  • 使用 C++ 进行桌面开发
  • 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 现在可以工作了;)

© www.soinside.com 2019 - 2024. All rights reserved.