编译Windows下PHP 8.3.6 x64共享扩展php_mailparse.dll失败求助
问题:Windows下编译PHP 8.3.6 x64 mailparse扩展后无法加载
我尝试为Windows系统下的PHP 8.3.6 x64版本编译mailparse共享扩展,操作步骤如下:
- 安装Visual Studio 2019基础组件
- 创建文件夹
c:\php-sdk - 将PHP 8.3.6源码解压到
php-sdk中 - 将mailparse 3.1.6的内容解压到
php-sdk/ext/mailparse目录 - 因执行
buildconf和configure时提示缺少二进制工具,额外下载PHP SDK二进制工具并解压到php-sdk/php-sdk-binary-tools-master目录 - 打开VS命令提示符,进入
php-sdk/php-sdk-binary-tools-master目录,执行phpsdk-vs16-x64.bat - 返回
php-sdk目录,执行配置命令:
配置输出显示mailparse为shared模式,编译环境为Release、非线程安全(NTS)、x64、VS2019configure --disable-all --enable-cli --enable-mbstring --enable-mailparse --disable-zts --with-all-shared - 执行
nmake完成编译,在php-sdk\x64\Release找到生成的php_mailparse.dll,复制到预编译PHP二进制文件的ext文件夹中
但加载该扩展时出现以下错误:
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
请问我哪里操作有误?
可能的原因及解决方法
1. 编译环境与预编译PHP不匹配
你编译扩展用的是VS2019 + 非线程安全(NTS) + Release,但如果预编译PHP不符合以下任意一点,就会出现加载失败:
- 预编译PHP是线程安全(ZTS)版本
- 预编译PHP用更高版本VS编译(比如VS2022)
- 预编译PHP是Debug版本
解决方法:
- 执行
php -v和php -i,查看Thread Safety、Compiler字段,确保和你的编译环境完全一致 - 如果预编译PHP是ZTS版本,重新编译时将配置命令中的
--disable-zts改为--enable-zts
2. 依赖扩展mbstring未正确加载或版本不匹配
mailparse依赖mbstring扩展,若预编译PHP中的mbstring是静态编译、或版本和你编译时使用的mbstring不一致,会导致找不到依赖函数。
解决方法:
- 打开
php.ini确认extension=mbstring已启用,且加载顺序在mailparse之前 - 将编译生成的
php_mbstring.dll也替换到预编译PHP的ext目录,确保依赖版本一致
3. 编译配置参数存在问题
你使用的--with-all-shared和--disable-all可能导致部分隐式依赖的核心符号未被正确导出。
解决方法:
- 调整配置命令,明确指定必要组件的模式:
configure --disable-all --enable-cli --enable-mbstring=shared --enable-mailparse=shared --disable-zts
4. DLL文件或路径问题
- 确认复制的
php_mailparse.dll是x64/Release目录下的版本,而非Debug或x86版本 - 执行
php -i | findstr "extension_dir",检查php.ini中extension_dir是否指向你放置dll的ext目录
5. 缺少VC++运行库
VS2019编译的程序需要对应版本的VC++ Redistributable Runtime,若系统未安装会导致加载失败。
解决方法:
- 安装Visual Studio 2019对应的x64版本VC++ Redistributable
内容的提问来源于stack exchange,提问作者mech
相关产品推荐
相关产品推荐

