c++ - 使用 Cmake 文件链接错误以在 Visual Studio 中构建 Qt 项目

标签 c++ visual-studio-2012 linker cmake qt5

我正在尝试使用 cmake 构建一个 qt 项目。作为起点,我只是在 qt creator 中编写了一个简单的代码,其中包含 main.cpp、mainwindow.cpp 和 mainwindow.h。下面是我的 CMakeLists.txt 配置。

cmake_minimum_required(VERSION 2.8.11)
project(testproject)

# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)

# Instruct CMake to run moc automatically when needed.
set(CMAKE_AUTOMOC ON)

# Find the QtWidgets library
find_package(Qt5Widgets)
find_package(Qt5Core)

get_target_property(QtCore_location Qt5::Core LOCATION)

# Tell CMake to create the executable
add_executable(testproject WIN32 main.cpp mainwindow.cpp)

# Use the Widgets module from Qt 5.
target_link_libraries(testproject Qt5::Widgets)

Cmake 确实成功生成了 VS 项目文件。但是,当我尝试在 visual studio 中构建它们时,它会给我链接错误。下面列出了一些错误。我无法发布整个错误列表,因为它太长了。

>main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __cdecl QWidget::show(void)" (__imp_?show@QWidget@@QEAAXXZ) referenced in function main
2>main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl QApplication::QApplication(int &,char * *,int)" (__imp_??0QApplication@@QEAA@AEAHPEAPEADH@Z) referenced in function main
2>main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __cdecl QApplication::~QApplication(void)" (__imp_??1QApplication@@UEAA@XZ) referenced in function main
2>main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: static int __cdecl QApplication::exec(void)" (__imp_?exec@QApplication@@SAHXZ) referenced in function main
2>mainwindow.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl QMetaObject::Connection::~Connection(void)" (__imp_??1Connection@QMetaObject@@QEAA@XZ) referenced in function "public: __cdecl MainWindow::MainWindow(class QWidget *)" (??0MainWindow@@QEAA@PEAVQWidget@@@Z)
2>mainwindow.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl QString::~QString(void)" (__imp_??1QString@@QEAA@XZ) referenced in function "public: __cdecl MainWindow::MainWindow(class QWidget *)" (??0MainWindow@@QEAA@PEAVQWidget@@@Z)
2>testproject_automoc.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual int __cdecl QMainWindow::qt_metacall(enum QMetaObject::Call,int,void * *)" (__imp_?qt_metacall@QMainWindow@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z) referenced in function "public: virtual int __cdecl MainWindow::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@MainWindow@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z)
2>testproject_automoc.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: static struct QMetaObject const QMainWindow::staticMetaObject" (__imp_?staticMetaObject@QMainWindow@@2UQMetaObject@@B) referenced in function "void __cdecl `dynamic initializer for 'public: static struct QMetaObject const MainWindow::staticMetaObject''(void)" (??__E?staticMetaObject@MainWindow@@2UQMetaObject@@B@@YAXXZ)
2>MSVCRT.lib(crtexew.obj) : error LNK2019: unresolved external symbol WinMain referenced in function __tmainCRTStartup

我正在使用 Qt5.3.1、cmake 3.0.2 和 visual studio 2012。

最佳答案

为了解决这个问题,您必须从中删除 WIN32 语句 add_executable(testproject WIN32 main.cpp mainwindow.cpp).

关于c++ - 使用 Cmake 文件链接错误以在 Visual Studio 中构建 Qt 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28068276/

相关文章:

visual-studio-2012 - Visual Studio 2012 中的 32 位构建

c++ - 为什么与 Direct X 链接会大大增加我的程序大小?

c++ - 我的链接器因 LNK1181 而失败时,我的环境变量中缺少什么?

android - "failed to map segment from shared object: operation not permitted"的可能原因是什么,如何调试?

c++ - 为什么 std::rel_ops::operators 在 C++20 中被弃用?

c# - 使用omp优化或提出c++,C#代码以查找所有相似的k个图案

visual-studio - 文件搜索中的 Visual Studio 替换每次替换后跳过匹配

javascript - 由于搜索尚未运行和激活时如何调试应用程序

c++ - 将 enable_if 与两个级别的模板一起使用

c++ - 关于在 C++ 中的集合 STL 中存储文件路径