You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下EXE访问MySQL失败,错误码-1073741515求助

问题分析与解决方案

错误码说明

错误码 -1073741515(十六进制 C0000135)对应Windows的STATUS_DLL_NOT_FOUND,表明程序启动时无法找到必需的动态链接库。命令行能正常运行但PHP调用失败,核心原因是两种运行环境的PATH环境变量不一致,导致依赖的DLL无法被加载。

排查与解决步骤

1. 定位缺失的DLL

用工具明确到底是哪个DLL找不到:

  • Process Monitor:设置过滤条件为atest.exe,启动PHP调用后,查看日志中标记为NAME NOT FOUND的文件,这些就是缺失的依赖。
  • Dependency Walker:直接打开atest.exe,红色高亮的条目即为无法定位的DLL。

2. 修复MSYS2 UCRT64运行时路径问题

你的程序用MSYS2 UCRT64环境编译,依赖该环境下的UCRT运行时组件,但Apache的SYSTEM用户PATH中大概率没有C:\msys64\ucrt64\bin这个路径:

  • 方法一:将C:\msys64\ucrt64\bin下的所有必需DLL(可通过Dependency Walker确认)复制到atest.exe所在目录。
  • 方法二:在Apache的httpd.conf中添加环境变量配置,重启Apache生效:
    SetEnv PATH "C:\msys64\ucrt64\bin;C:\Program Files\MySQL\MySQL Server 8.0\lib;%PATH%"
    

3. 验证libmysql.dll的兼容性

确保你复制的libmysql.dll是64位UCRT版本:

  • MySQL 8.0的官方libmysql.dll分为不同CRT版本,若你用MSYS2 UCRT64编译,需匹配UCRT版本的库文件,避免因CRT不兼容导致加载失败。
  • 可尝试从MSYS2仓库安装mingw-w64-ucrt-x86_64-libmysqlclient,使用该环境下的libmysql.dll替换现有文件。

4. 检查程序输出捕获

PHP调用外部程序时,需确保正确捕获标准输出和错误输出:
修改PHP调用代码,同时获取stdout和stderr,比如:

$output = [];
$return_var = 0;
exec('atest.exe 2>&1', $output, $return_var);
print_r($output);
echo "Return code: $return_var";

这能帮你看到程序启动时的错误提示,进一步定位问题。


内容的提问来源于stack exchange,提问作者MichaelD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 22:13:17