vscode本身不报依赖库缺失错误,出错的是其运行的程序;根本原因是调试或运行时环境变量未正确配置,必须在launch.json的env字段中显式设置path等变量,如"env": {"path": "c:\mingw64\bin;${env:path}"},确保dll/.so被正确加载。

VSCode 本身不报“依赖库缺失”错误——出错的永远是你在 VSCode 里运行的程序,不是 VSCode 自己。 真正的问题是:你用 VSCode 启动调试(F5)、终端执行(Ctrl+`)或任务构建时,环境变量没继承、路径没配对、DLL / .so 没被加载器看见。
launch.json 的 env.PATH 必须显式写死,不能靠系统 PATH
Windows 下常见报错:无法定位程序输入点于 qt5core.dll、找不到 libstdc++-6.dll。这不是编译失败,是调试器(GDB / Windows 默认调试器)启动你的可执行文件时,根本没去你装 MinGW 或 Qt 的目录找 DLL。
-
launch.json的env字段必须包含完整路径,例如:"env": {"PATH": "C:\mingw64\bin;${env:PATH}"} - 路径分隔符必须用双反斜杠
\,单斜杠/或正斜杠/在 JSON 字符串里会被转义或解析失败 -
${env:PATH}可能为空,尤其图形界面双击启动的 VSCode;不能只写它,得把关键 bin 目录前置 - Qt 项目还要额外加
QT_QPA_PLATFORM_PLUGIN_PATH,否则报failed to load platform plugin 'windows'
Linux/macOS 下 LD_LIBRARY_PATH 不会自动继承
你在终端里 export LD_LIBRARY_PATH=/opt/mylib/lib 后 go run 成功,但 VSCode 里按 F5 就报 error while loading shared libraries: libxxx.so: cannot open shared object file——因为图形界面启动的 VSCode 根本没读你的 ~/.zshrc。
- macOS/Linux 正确做法:从终端执行
code .启动 VSCode,它才会继承当前 shell 的所有环境变量 - 如果必须双击启动,就得在
launch.json的env里硬编码:"LD_LIBRARY_PATH": "/opt/mylib/lib:${env:LD_LIBRARY_PATH}" - 验证是否生效:打开 VSCode 内置终端,运行
echo $LD_LIBRARY_PATH,确认输出含你期望的路径 -
CGO_LDFLAGS="-L/path/to/lib -lxxx"编译成功 ≠ 运行成功;运行时仍要靠LD_LIBRARY_PATH或RPATH
别把 DLL 拷到 exe 同目录当正解
看似一拖就跑通,实则埋雷:多个 Qt 版本共存时,同目录下 qt5core.dll 和 Qt5Core.dll(大小写敏感)可能冲突;不同项目依赖不同版本的 libgcc_s_seh-1.dll,放一起只会加载第一个,另一个静默失效。
- 真正干净的做法是用
windeployqt(Qt 官方工具)自动收集依赖,而不是手动复制 - 用
Dependencies(Windows)或ldd(Linux)查实际加载路径:ldd ./myapp看哪一行标not found - 某些 DLL(如
vcruntime140.dll)属于 Windows 系统级 CRT,不能随便替换;报错指向它,说明系统运行时损坏,得跑sfc /scannow - Python 的
ImportError: DLL load failed多半是 matplotlib / OpenCV 等包依赖的 Qt 或 GTK DLL 没加载到,不是 pip 安装问题
最易被忽略的一点:VSCode 的 tasks.json(构建)和 launch.json(运行)是两套独立环境,env 配置必须各自写全。构建时 PATH 对了,运行时 PATH 错了,就会出现“编译成功、一运行就崩”。











