VS2019编译*.sln后跨PC运行异常问题及解决方案咨询
解决Visual Studio 2019下Qt+MariaDB程序静态编译及运行错误问题
Q1:静态编译后仍提示缺少DLL,步骤是否有误?
你的静态编译步骤仅配置了Visual Studio自身的MFC和C++运行时库,未处理Qt和MariaDB的链接方式,这是核心问题:
- 当前你链接的是Qt动态库(从
Qt5Cored.dll这类带d后缀的Debug动态库可判断),默认Qt安装包提供的是动态库版本,静态编译需要专门的静态Qt库; - MariaDB默认使用的是动态链接的
libmariadb.dll,你只是设置了VS的运行时,没把MariaDB静态库嵌入到exe中。
修正方案
切换到Qt静态库
- 若没有静态Qt库,需下载Qt源码,用对应VS2019的编译器以静态模式编译(编译时需指定
-static参数,同时配置好依赖项); - 通过Visual Studio的Qt VS Tools,将项目切换到静态版本的Qt套件,确保项目链接的是Qt静态库而非动态导入库;
- 在项目预处理器定义中添加
QT_NO_DLL,强制Qt以静态方式工作。
- 若没有静态Qt库,需下载Qt源码,用对应VS2019的编译器以静态模式编译(编译时需指定
静态链接MariaDB
- 下载MariaDB的静态库包(或自行从源码编译静态库);
- 在项目链接器->输入中,将动态导入库
libmariadb.lib替换为MariaDB静态库; - 添加预处理器定义
MARIADB_STATIC,让编译器以静态方式嵌入MariaDB代码。
保持VS的静态配置
- 保留你已设置的:
Configuration Properties -> General -> Use of MFC = Use MFC in a Static Library; Configuration Properties -> C/C++ -> Code Generation -> Runtime Library,Debug版选Multi-Threaded Debug (/MTd),Release版选Multi-Threaded (/MT),确保整个项目运行时库一致。
- 保留你已设置的:
Q2:添加DLL后仍出现“应用程序无法正常启动(0xc000007b)”错误
0xc000007b错误几乎都是依赖不匹配导致的,常见原因及解决办法:
- 架构不兼容:exe是x64编译的,但复制了x86的DLL,或者反过来。要确保所有DLL和exe的CPU架构完全一致。
- Debug/Release不匹配:Debug版exe必须搭配带
d后缀的Qt/MariaDB DLL(如Qt5Cored.dll),Release版则用不带d的版本(如Qt5Core.dll),混合使用必然报错。 - 运行时库冲突:你的exe设置了
/MT(静态运行时),但如果所用的Qt/MariaDB DLL是用/MD(动态运行时)编译的,会导致运行时库冲突。这种情况要么统一为静态编译,要么把exe的运行时库改成/MD,同时确保所有DLL也用/MD编译。 - 依赖缺失不完整:Qt的运行不仅需要核心DLL,还需要平台插件(比如
qwindows.dll,放在platforms子目录)、字体文件等。可以用Qt自带的windeployqt工具自动补全所有依赖,命令示例:windeployqt your_app.exe
内容的提问来源于stack exchange,提问作者tkkkks
相关产品推荐
相关产品推荐

