如何用Visual Studio 2022社区版编译兼容MSVC14.29的PHP
解决VS2022编译PHP时链接MSVC 14.29的问题
核心问题
使用VS2022安装程序搭建PHP编译环境时,因C++ CMake工具依赖MSVC 14.40,导致编译出的PHP或PECL扩展默认链接到14.40版本运行时,与官方PHP二进制依赖的14.29版本不兼容,触发扩展加载失败提示:
Warning: PHP Startup: Can't load module 'php_jsmin.dll' as it's linked with 14.40, but the core is linked with 14.29 in Unknown on line 0
解决方案步骤
1. 用VS2022安装程序安装指定组件
运行VisualStudioSetup.exe,选择「修改」现有安装(或新建安装),在「单个组件」标签中勾选以下内容:
- MSVC v142 - VS 2019 C++ x64/x86 构建工具 (v14.29):搜索对应版本精准勾选
- C++ CMake 工具 for Windows
- 对应官方PHP编译用的Windows SDK版本(如10.0.19041.0):确保版本与官方PHP一致,避免额外兼容性问题
2. 强制指定编译时使用MSVC 14.29工具链
场景1:使用PHP官方build脚本编译
先调用VS2022的环境变量脚本,明确指定使用v142工具集:
call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat" -vcvars_ver=14.29
再执行PHP的编译命令(如buildconf、configure、nmake),此时编译过程会强制绑定14.29版本的MSVC链接器。
场景2:用CMake编译PECL扩展
在CMakeLists.txt中直接添加工具集指定:
set(CMAKE_GENERATOR_TOOLSET v142) set(CMAKE_VS_PLATFORM_TOOLSET_VERSION 14.29)
或在执行cmake命令时通过参数指定:
cmake .. -G "Visual Studio 17 2022" -A x64 -T v142,version=14.29
3. 处理CMake依赖冲突的额外方案
若安装C++ CMake工具后,系统仍默认调用14.40工具链,可手动创建工具链文件:
新建toolchain-v142.cmake,内容如下:
set(CMAKE_C_COMPILER "cl.exe") set(CMAKE_CXX_COMPILER "cl.exe") set(CMAKE_GENERATOR_TOOLSET v142) set(CMAKE_VS_PLATFORM_TOOLSET_VERSION 14.29)
执行cmake时指定该工具链文件:
cmake .. -DCMAKE_TOOLCHAIN_FILE=toolchain-v142.cmake -G "Visual Studio 17 2022" -A x64
验证方法
编译完成后,用dumpbin工具检查产物的依赖版本:
dumpbin /dependents php_jsmin.dll
查看输出中MSVCRT.dll或VCRUNTIME140.dll相关条目,确认链接的是14.29版本运行时库。
内容的提问来源于stack exchange,提问作者McK
相关产品推荐
相关产品推荐

