![](/img/trans.png)
[英]Why can't Visual Studio compile my QT Project because it doesn't find the libraries?
[英]CMake project using Qt libraries in Visual Studio 2017: can't find Qt dll when running the exe
我正在尝试将Qt库用于Visual Studio的CMake项目。 我能够使用CMake找到所有Qt5组件(例如Qt5Sql和Qt5Core)。 当我为测试做源文件时,我也可以访问Qt对象。
但是,在我完成构建并尝试运行生成的可执行文件后,它会抱怨“您的计算机中缺少Qt5Sql.dll”。 然后我将dll复制到可执行文件所在的构建文件夹,但这并没有解决问题。 然而,虽然我认为Qt5Core也用于测试,但它没有抱怨Qt5Core并且没有说它丢失了。
以下是我的问题:
使用的工具和系统:CMake 3.8.1,Qt 5.9 beta,Visual Studio 2017,windows 10
下面是我用于测试的CMakeLists.txt:
cmake_minimum_required(VERSION 3.6)
project(testQt)
set(CMAKE_PREFIX_PATH D:\\Qt\\5.9\\msvc2015_64\\lib\\cmake)
set (CMAKE_AUTOMOC ON)
set (CMAKE_INCLUDE_CURRENT_DIR ON)
find_package(Qt5 REQUIRED COMPONENTS
Core
Sql
Widgets
Gui
)
add_executable(test test.cpp)
target_link_libraries(test
Qt5::Core
Qt5::Sql
)
下面是test.cpp。 我在Qt creater中尝试过test.cpp,它在那里工作。 它只是建立与本地数据库的连接。
#include <QtDebug>
#include <QString>
#include <QtSql>
#include <QSqlDatabase>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlError>
#include <QtSql/QSqlDriver>
int main()
{
QString servername = "DESKTOP-NAME\\SQLEXPRESS";
QString dbname = "sql_db_test";
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setConnectOptions();
QString dsn = QString("Driver={SQL Server};Server=%1;DATABASE=%2;Trusted_Connection=Yes;").arg(servername).arg(dbname);
db.setDatabaseName(dsn);
qDebug() << db.connectionName();
return 0;
}
[编辑]以下是Dependency Walker的日志文件
***************************| Module Dependency Tree |***************************
* *
* Legend: F Forwarded Module ? Missing Module 6 64-bit Module *
* D Delay Load Module ! Invalid Module *
* * Dynamic Module E Import/Export Mismatch or Load Failure *
* ^ Duplicate Module *
* *
********************************************************************************
[ 6] test.EXE
[ ? ] QT5SQLD.DLL
[ ? ] QT5CORED.DLL
[ 6] MSVCP140D.DLL
[ ^6] VCRUNTIME140D.DLL
[ ^6] UCRTBASED.DLL
[ ^6] KERNEL32.DLL
[F^6] NTDLL.DLL
[D 6] CONCRT140D.DLL
[ ^6] MSVCP140D.DLL
[ ^6] VCRUNTIME140D.DLL
[ ^6] UCRTBASED.DLL
[ ^6] KERNEL32.DLL
[F^6] NTDLL.DLL
[ 6] VCRUNTIME140D.DLL
[ ^6] UCRTBASED.DLL
[ ^6] KERNEL32.DLL
[F^6] NTDLL.DLL
[ 6] UCRTBASED.DLL
[ 6] API-MS-WIN-CORE-STRING-L1-1-0.DLL
[F^6] KERNEL32.DLL
[ 6] API-MS-WIN-CORE-ERRORHANDLING-L1-1-0.DLL
[F^6] KERNEL32.DLL
[ 6] API-MS-WIN-CORE-FILE-L1-1-0.DLL
[F^6] KERNEL32.DLL
[ 6] API-MS-WIN-CORE-TIMEZONE-L1-1-0.DLL
[F^6] KERNEL32.DLL
[ 6] API-MS-WIN-CORE-HANDLE-L1-1-0.DLL
[F^6] KERNEL32.DLL
[ 6] API-MS-WIN-CORE-NAMEDPIPE-L1-1-0.DLL
[F^6] KERNEL32.DLL
[ 6] API-MS-WIN-CORE-FILE-L2-1-0.DLL
[F^6] KERNEL32.DLL
[ 6] API-MS-WIN-CORE-HEAP-L1-1-0.DLL
[F^6] KERNEL32.DLL
[F^6] NTDLL.DLL
[ 6] API-MS-WIN-CORE-SYSINFO-L1-1-0.DLL
[F^6] KERNEL32.DLL
[ 6] API-MS-WIN-CORE-LIBRARYLOADER-L1-1-0.DLL
[F^6] KERNEL32.DLL
[ 6] API-MS-WIN-CORE-SYNCH-L1-1-0.DLL
[F^6] KERNEL32.DLL
[F^6] NTDLL.DLL
[ 6] API-MS-WIN-CORE-PROCESSTHREADS-L1-1-0.DLL
[F^6] KERNEL32.DLL
[F^6] NTDLL.DLL
[ 6] API-MS-WIN-CORE-PROCESSENVIRONMENT-L1-1-0.DLL
[F^6] KERNEL32.DLL
[ 6] API-MS-WIN-CORE-DATETIME-L1-1-0.DLL
[F^6] KERNEL32.DLL
[ 6] API-MS-WIN-CORE-LOCALIZATION-L1-2-0.DLL
[F^6] KERNEL32.DLL
[ 6] API-MS-WIN-CORE-SYNCH-L1-2-0.DLL
[F^6] KERNEL32.DLL
[ 6] API-MS-WIN-CORE-CONSOLE-L1-1-0.DLL
[F^6] KERNEL32.DLL
[ 6] API-MS-WIN-CORE-DEBUG-L1-1-0.DLL
[F^6] KERNEL32.DLL
[ 6] API-MS-WIN-CORE-RTLSUPPORT-L1-1-0.DLL
[F^6] NTDLL.DLL
[ 6] API-MS-WIN-CORE-PROCESSTHREADS-L1-1-1.DLL
[F^6] KERNEL32.DLL
[ 6] API-MS-WIN-CORE-FILE-L1-2-0.DLL
[F^6] KERNEL32.DLL
[ 6] API-MS-WIN-CORE-PROFILE-L1-1-0.DLL
[F^6] KERNEL32.DLL
[ 6] API-MS-WIN-CORE-MEMORY-L1-1-0.DLL
[F^6] KERNEL32.DLL
[ 6] API-MS-WIN-CORE-UTIL-L1-1-0.DLL
[F^6] KERNEL32.DLL
[F^6] NTDLL.DLL
[ 6] API-MS-WIN-CORE-INTERLOCKED-L1-1-0.DLL
[F^6] KERNEL32.DLL
[F^6] NTDLL.DLL
[ 6] KERNEL32.DLL
[ ? ] API-MS-WIN-CORE-RTLSUPPORT-L1-2-0.DLL
[ 6] NTDLL.DLL
[ 6] KERNELBASE.DLL
[ ^6] NTDLL.DLL
[ ^6] API-MS-WIN-EVENTING-PROVIDER-L1-1-0.DLL
[F^6] ADVAPI32.DLL
[F^6] NTDLL.DLL
[ ? ] API-MS-WIN-CORE-APIQUERY-L1-1-0.DLL
[D? ] EXT-MS-WIN-ADVAPI32-REGISTRY-L1-1-0.DLL
[D? ] EXT-MS-WIN-KERNEL32-APPCOMPAT-L1-1-0.DLL
[D? ] EXT-MS-WIN-NTUSER-STRING-L1-1-0.DLL
[D? ] EXT-MS-WIN-KERNEL32-FILE-L1-1-0.DLL
[D? ] EXT-MS-WIN-KERNEL32-DATETIME-L1-1-0.DLL
[D? ] EXT-MS-WIN-KERNEL32-QUIRKS-L1-1-0.DLL
[D? ] EXT-MS-WIN-KERNEL32-QUIRKS-L1-1-1.DLL
[D? ] EXT-MS-WIN-KERNEL32-SIDEBYSIDE-L1-1-0.DLL
[D? ] EXT-MS-WIN-MRMCORER-RESMANAGER-L1-1-0.DLL
[D? ] EXT-MS-WIN-KERNEL32-WINDOWSERRORREPORTING-L1-1-0.DLL
[D? ] EXT-MS-WIN-KERNEL32-WINDOWSERRORREPORTING-L1-1-1.DLL
[D? ] EXT-MS-WIN-GPAPI-GROUPPOLICY-L1-1-0.DLL
[D? ] EXT-MS-WIN-NTDSAPI-ACTIVEDIRECTORYCLIENT-L1-1-0.DLL
[D? ] EXT-MS-WIN-NTDSAPI-ACTIVEDIRECTORYCLIENT-L1-1-1.DLL
[D? ] EXT-MS-WIN-SHELL32-SHELLCOM-L1-1-0.DLL
[D? ] EXT-MS-WIN-ADVAPI32-NTMARTA-L1-1-0.DLL
[D? ] EXT-MS-WIN-SECURITY-CAPAUTHZ-L1-1-0.DLL
[D? ] EXT-MS-WIN-FECLIENT-ENCRYPTEDFILE-L1-1-0.DLL
[D? ] EXT-MS-WIN-SECURITY-EFSWRT-L1-1-1.DLL
[D? ] EXT-MS-WIN-APPMODEL-DAXCORE-L1-1-0.DLL
[D? ] EXT-MS-WIN-KERNEL32-ERRORHANDLING-L1-1-0.DLL
[D? ] EXT-MS-WIN-KERNEL32-REGISTRY-L1-1-0.DLL
[D? ] EXT-MS-WIN-KERNELBASE-PROCESSTHREAD-L1-1-0.DLL
[D? ] EXT-MS-WIN-ADVAPI32-NPUSERNAME-L1-1-0.DLL
[D? ] EXT-MS-WIN-APPXDEPLOYMENTCLIENT-APPXDEPLOY-L1-1-0.DLL
[D? ] EXT-MS-WIN-APPXDEPLOYMENTCLIENT-APPXDEPLOYONECORE-L1-1-0.DLL
[D? ] EXT-MS-WIN-COM-PSMREGISTER-L1-2-1.DLL
[ ? ] API-MS-WIN-CORE-PROCESSTHREADS-L1-1-3.DLL
[ ? ] API-MS-WIN-CORE-PROCESSTHREADS-L1-1-2.DLL
[ ? ] API-MS-WIN-CORE-REGISTRY-L1-1-0.DLL
[ ? ] API-MS-WIN-CORE-HEAP-L1-2-0.DLL
[ ? ] API-MS-WIN-CORE-HEAP-L2-1-0.DLL
[ ? ] API-MS-WIN-CORE-MEMORY-L1-1-2.DLL
[ ? ] API-MS-WIN-CORE-ENCLAVE-L1-1-0.DLL
[ ^6] API-MS-WIN-CORE-HANDLE-L1-1-0.DLL
[F^6] KERNEL32.DLL
[ E6] API-MS-WIN-CORE-SYNCH-L1-2-0.DLL
[F^6] KERNEL32.DLL
[FE6] API-MS-WIN-CORE-SYNCH-L1-1-0.DLL
[ ? ] API-MS-WIN-CORE-SYNCH-L1-2-1.DLL
[ ? ] API-MS-WIN-CORE-FILE-L1-2-1.DLL
[ ? ] API-MS-WIN-CORE-FILE-L1-2-2.DLL
[ ? ] API-MS-WIN-CORE-DELAYLOAD-L1-1-1.DLL
[ ? ] API-MS-WIN-CORE-IO-L1-1-1.DLL
[ ? ] API-MS-WIN-CORE-JOB-L1-1-0.DLL
[ ? ] API-MS-WIN-CORE-THREADPOOL-LEGACY-L1-1-0.DLL
[ ? ] API-MS-WIN-CORE-THREADPOOL-PRIVATE-L1-1-0.DLL
[ ? ] API-MS-WIN-CORE-LIBRARYLOADER-L1-2-2.DLL
[ ? ] API-MS-WIN-CORE-LIBRARYLOADER-L1-2-0.DLL
[ ? ] API-MS-WIN-CORE-LIBRARYLOADER-L2-1-0.DLL
[ ? ] API-MS-WIN-CORE-NAMEDPIPE-L1-2-2.DLL
[ ? ] API-MS-WIN-CORE-NAMEDPIPE-L1-2-0.DLL
[ ? ] API-MS-WIN-CORE-DATETIME-L1-1-1.DLL
[ ? ] API-MS-WIN-CORE-DATETIME-L1-1-2.DLL
[ ? ] API-MS-WIN-CORE-SYSINFO-L1-2-1.DLL
[ ? ] API-MS-WIN-CORE-SYSINFO-L1-2-3.DLL
[ ^6] API-MS-WIN-CORE-TIMEZONE-L1-1-0.DLL
[F^6] KERNEL32.DLL
[ ? ] API-MS-WIN-CORE-LOCALIZATION-L1-2-1.DLL
[ ? ] API-MS-WIN-CORE-PROCESSSNAPSHOT-L1-1-0.DLL
[ ? ] API-MS-WIN-CORE-PROCESSENVIRONMENT-L1-2-0.DLL
[ ^6] API-MS-WIN-CORE-STRING-L1-1-0.DLL
[F^6] KERNEL32.DLL
[ ? ] API-MS-WIN-CORE-DEBUG-L1-1-1.DLL
[ ? ] API-MS-WIN-CORE-ERRORHANDLING-L1-1-1.DLL
[ ? ] API-MS-WIN-CORE-ERRORHANDLING-L1-1-3.DLL
[ ? ] API-MS-WIN-CORE-FIBERS-L1-1-1.DLL
[ ^6] API-MS-WIN-CORE-PROFILE-L1-1-0.DLL
[F^6] KERNEL32.DLL
[ ? ] API-MS-WIN-SECURITY-BASE-L1-2-0.DLL
[ ? ] API-MS-WIN-SECURITY-APPCONTAINER-L1-1-0.DLL
[ ? ] API-MS-WIN-CORE-COMM-L1-1-0.DLL
[ ? ] API-MS-WIN-CORE-REALTIME-L1-1-0.DLL
[ ? ] API-MS-WIN-CORE-WOW64-L1-1-1.DLL
[ ? ] API-MS-WIN-CORE-WOW64-L1-1-0.DLL
[ ? ] API-MS-WIN-CORE-PROCESSTOPOLOGY-L1-2-0.DLL
[ ? ] API-MS-WIN-CORE-NAMESPACE-L1-1-0.DLL
[ ? ] API-MS-WIN-CORE-FILE-L2-1-2.DLL
[ ? ] API-MS-WIN-CORE-FILE-L2-1-1.DLL
[ ? ] API-MS-WIN-CORE-XSTATE-L2-1-0.DLL
[ ? ] API-MS-WIN-CORE-LOCALIZATION-L2-1-0.DLL
[ ? ] API-MS-WIN-CORE-NORMALIZATION-L1-1-0.DLL
[ ? ] API-MS-WIN-CORE-FIBERS-L2-1-1.DLL
[ ? ] API-MS-WIN-CORE-LOCALIZATION-PRIVATE-L1-1-0.DLL
[ ? ] API-MS-WIN-CORE-SIDEBYSIDE-L1-1-0.DLL
[ ? ] API-MS-WIN-CORE-APPCOMPAT-L1-1-1.DLL
[ ? ] API-MS-WIN-CORE-WINDOWSERRORREPORTING-L1-1-0.DLL
[ ^6] API-MS-WIN-CORE-CONSOLE-L1-1-0.DLL
[F^6] KERNEL32.DLL
[ ? ] API-MS-WIN-CORE-CONSOLE-L2-1-0.DLL
[ ? ] API-MS-WIN-CORE-PSAPI-L1-1-0.DLL
[ ? ] API-MS-WIN-CORE-PSAPI-ANSI-L1-1-0.DLL
[ 6] API-MS-WIN-EVENTING-PROVIDER-L1-1-0.DLL
[F 6] ADVAPI32.DLL
[ 6] MSVCRT.DLL
[ ^6] NTDLL.DLL
[ ^6] API-MS-WIN-CORE-CONSOLE-L1-1-0.DLL
[F^6] KERNEL32.DLL
[ ? ] API-MS-WIN-CORE-DATETIME-L1-1-1.DLL
[ ? ] API-MS-WIN-CORE-DEBUG-L1-1-1.DLL
[ ? ] API-MS-WIN-CORE-ERRORHANDLING-L1-1-1.DLL
[ ? ] API-MS-WIN-CORE-FIBERS-L1-1-1.DLL
[ ? ] API-MS-WIN-CORE-FILE-L1-2-1.DLL
[ ^6] API-MS-WIN-CORE-HANDLE-L1-1-0.DLL
[F^6] KERNEL32.DLL
[ ? ] API-MS-WIN-CORE-HEAP-L1-2-0.DLL
[ ? ] API-MS-WIN-CORE-LOCALIZATION-L1-2-1.DLL
[ ? ] API-MS-WIN-CORE-LIBRARYLOADER-L1-2-0.DLL
[ ? ] API-MS-WIN-CORE-MEMORY-L1-1-2.DLL
[ ? ] API-MS-WIN-CORE-NAMEDPIPE-L1-2-0.DLL
[ ? ] API-MS-WIN-CORE-PROCESSENVIRONMENT-L1-2-0.DLL
[ ? ] API-MS-WIN-CORE-PROCESSTHREADS-L1-1-2.DLL
[ ^6] API-MS-WIN-CORE-PROFILE-L1-1-0.DLL
[F^6] KERNEL32.DLL
[ ^6] API-MS-WIN-CORE-STRING-L1-1-0.DLL
[F^6] KERNEL32.DLL
[ E6] API-MS-WIN-CORE-SYNCH-L1-2-0.DLL
[F^6] KERNEL32.DLL
[ ? ] API-MS-WIN-CORE-SYSINFO-L1-2-1.DLL
[ ^6] API-MS-WIN-CORE-UTIL-L1-1-0.DLL
[F^6] KERNEL32.DLL
[F^6] NTDLL.DLL
[ ^6] KERNELBASE.DLL
[F^6] NTDLL.DLL
[ ^6] NTDLL.DLL
[ E6] API-MS-WIN-EVENTING-CONTROLLER-L1-1-0.DLL
[F^6] ADVAPI32.DLL
[ ? ] API-MS-WIN-EVENTING-CONSUMER-L1-1-0.DLL
[ ^6] KERNELBASE.DLL
[ 6] SECHOST.DLL
[ ^6] NTDLL.DLL
[ ? ] API-MS-WIN-CORE-LIBRARYLOADER-L1-2-0.DLL
[ ^6] RPCRT4.DLL
[ ? ] API-MS-WIN-CORE-CRT-L1-1-0.DLL
[ ? ] API-MS-WIN-CORE-THREADPOOL-L1-2-0.DLL
[ ? ] API-MS-WIN-CORE-FILE-L1-2-1.DLL
[ ? ] API-MS-WIN-CORE-IO-L1-1-1.DLL
[ ? ] API-MS-WIN-CORE-DEBUG-L1-1-1.DLL
[ ? ] API-MS-WIN-CORE-ERRORHANDLING-L1-1-1.DLL
[ ^6] API-MS-WIN-CORE-HANDLE-L1-1-0.DLL
[F^6] KERNEL32.DLL
[ ? ] API-MS-WIN-CORE-HEAP-L1-2-0.DLL
[ ? ] API-MS-WIN-CORE-REGISTRY-L1-1-0.DLL
[ ? ] API-MS-WIN-CORE-HEAP-OBSOLETE-L1-1-0.DLL
[ ? ] API-MS-WIN-CORE-MEMORY-L1-1-2.DLL
[ ? ] API-MS-WIN-CORE-PROCESSTHREADS-L1-1-2.DLL
[ ^6] API-MS-WIN-CORE-STRING-L1-1-0.DLL
[F^6] KERNEL32.DLL
[ E6] API-MS-WIN-CORE-SYNCH-L1-2-0.DLL
[F^6] KERNEL32.DLL
[ ? ] API-MS-WIN-CORE-SYSINFO-L1-2-1.DLL
[ ? ] API-MS-WIN-CORE-WOW64-L1-1-0.DLL
[ ? ] API-MS-WIN-SECURITY-BASE-L1-2-0.DLL
[ ? ] API-MS-WIN-CORE-APIQUERY-L1-1-0.DLL
[ ? ] API-MS-WIN-CORE-DELAYLOAD-L1-1-1.DLL
[D? ] EXT-MS-WIN-EVENTING-RUNDOWN-L1-1-0.DLL
[D? ] EXT-MS-WIN-SECURITY-CHAMBERS-L1-1-0.DLL
[D^6] CRYPTBASE.DLL
当Qt构建为DLL时,D:\\ Qt \\ 5.9 \\ msvc2015_64 \\ lib \\ cmake中的文件只能找到导入库。 与包含文件一起,这些文件足以使编译器和链接进程解决开放依赖性。 您必须将Qt D:\\ Qt \\ 5.9 \\ msvc2015_64 \\ bin和D:\\ Qt \\ 5.9 \\ msvc2015_64 \\ plugins \\ platforms的二进制目录添加到环境中,方法是将其附加到PATH变量。
PATH = d:\\ Qt的\\ 5.9 \\ msvc2015_64 \\ BIN; d:\\ Qt的\\ 5.9 \\ msvc2015_64 \\插件\\平台;%PATH%
要在Visual Studio中进行测试,可以在Environment中的Configuration Properties Debugging部分下添加此设置。 转到解决方案资源管理器,右键单击项目(示例中的“test”),然后选择Properties以显示Configuration Properties。 请参阅使用项目属性
如果您稍后使用CMake / CPack为您的项目构建安装程序,Qt Windows部署工具可以方便地识别分发所需的Qt DLL。 请参阅Qt部署
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.