在将QT与Cmake一起使用时解决链接错误
resolving linking errors while using Qt with cmake
当我使用以下cmake脚本构建时,项目构建而没有错误。
cmake_minimum_required(VERSION 3.0.0)
project(asdqwdw VERSION 0.1 LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
find_package(Qt5 COMPONENTS
Core
REQUIRED)
add_executable(${PROJECT_NAME} main.cpp serv.h serv.cpp)
target_link_libraries(${PROJECT_NAME} Qt5::Core)
但是,当我使用以下cmake脚本时,
cmake_minimum_required(VERSION 3.0.0)
project(asdqwdw VERSION 0.1 LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
find_package(Qt5 COMPONENTS
Core
REQUIRED)
add_library(SERV serv.h serv.cpp)
target_link_libraries(SERV Qt5::Core)
add_executable(${PROJECT_NAME} main.cpp ${SERV})
target_link_libraries(${PROJECT_NAME} Qt5::Core)
我有这个错误,
CMakeFiles/asdqwdw.dir/main.cpp.o: In function `main':
main.cpp:(.text+0x45): undefined reference to `serv::serv(QObject*)'
CMakeFiles/asdqwdw.dir/main.cpp.o: In function `serv::~serv()':
main.cpp:(.text._ZN4servD2Ev[_ZN4servD5Ev]+0xf): undefined reference
to `vtable for serv'
collect2: error: ld returned 1 exit status
make[2]: *** [asdqwdw] Error 1
make[1]: *** [CMakeFiles/asdqwdw.dir/all] Error 2
make: *** [all] Error 2
是否有解释说明为什么我不能使用后一个Cmake脚本而不是以前?
这些文件未放置在子目录中,它们如下。
main.cpp
#include <QCoreApplication>
#include "serv.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
serv dat;
return a.exec();
}
serv.h
#ifndef SERV_H
#define SERV_H
#include <QObject>
class serv : public QObject
{
Q_OBJECT
public:
explicit serv(QObject *parent = nullptr);
signals:
public slots:
};
#endif // SERV_H
serv.cpp
#include "serv.h"
serv::serv(QObject *parent) :
QObject(parent)
{
}
您的问题在于您使用add_executable
而不是
add_executable(${PROJECT_NAME} main.cpp ${SERV})
target_link_libraries(${PROJECT_NAME} Qt5::Core)
做
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} SERV Qt5::Core)
当您add_library(SERV ...
时,您正在创建一个称为SERV
的TARGET
,而不是变量。因此,首先,您无需围绕它使用${...}
。其次,您是链接您可执行的目标库,而不是作为可执行文件的一部分构建目标库。这就是为什么我们将SERV
添加到target_add_library()
而不是作为参数到add_executable()
相关文章:
- 未解决的外部链接问题
- Clang 8 带有静态 constexpr 和数组的链接器错误 - 错误是什么以及如何解决它?
- 调用运算符时出现链接器错误<<,如何解决?
- 在Embarcadero C++ Builder中生成的DLL未解决的外部链接错误
- mapreduce c编程与-fPIC链接失败,如何解决?
- 当只有静态方法受到影响时,如何解决C++中的链接器错误?
- C++链接错误,我理解但无法解决
- 将单元测试添加到旧解决方案时出现链接错误
- 在可视化解决方案 c++ 中获取链接器错误
- 在将QT与Cmake一起使用时解决链接错误
- C - 使用静态和动态库时解决链接器错误
- 更改参数的顺序可解决链接器错误
- 尝试解决链接器警告:默认库'MSVCRT'与使用其他库冲突
- 如何使用libcurl解决链接中未定义的引用错误
- 使用 JNI 将 C# 加载到 Java 项目中的未解决链接错误
- 我在尝试在类中创建对象时面临如何解决链接错误
- 需要帮助解决链接器错误LNK2001 Visual Studio 2010
- 链接器如何解决链接*.lib时的歧义
- QT Creator配置更改以解决链接错误
- 解决链接器错误:对静态类成员的未定义引用