CLion - 无法解决类中对构造函数的未定义引用

CLion - cannot solve undefined reference to constructor in class

本文关键字:构造函数 未定义 引用 解决 CLion      更新时间:2023-10-16

我已经看过这个 SO 答案,但我似乎找不到适合我的情况的解决方案。

我刚开始在C++和CLion工作。我做了一个基本的测试项目,其中包括一个头文件,然后 main 函数执行所包含类中的一个方法 - 一切正常,CLion 编译器是 MinGW。

现在我需要处理的实际项目集成了来自C++编写的供应商的SDK。他们也有例子。每次我运行它们时,CLion 都会破坏构建并抱怨未定义的引用......包含文件路径都是正确的,CMakeList.txt如下所示:

project(test_2)
include_directories("../libraries/bin/headers/")
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_EXE_LINKER_FLAGS "")
set(PROJECT_HEADERS
"../libraries/bin/headers/SDK.h"
"test.h"
)
set(PROJECT_SOURCES
main.cpp
)
add_executable(test_2 ${PROJECT_SOURCES} ${PROJECT_HEADERS})

列出的第一个未定义引用是 SDK 类的构造函数,它简单地写成:

class SDK{
...
SDK();
...
}

任何建议是什么问题?

由于目前的情况,我无法联系到他们那边的任何人,所以我想我在这里问......

谢谢!

溶液:

解决方案是从.cpp文件中编译库,并创建一个引用这些库的干净 CMakeList 文件,然后解决未定义的引用错误。

我不会流利的 CMake- 但如果使用外部 SDK,您可能还必须使用target_link_libraries()/target_link_directories()之类的东西链接库/目录。在我看来,您只是告诉编译器"嘿,这是我的 SDK 标头,做点什么",但编译器不知道此 SDK 的符号在哪里定义。这里有一点解释两者之间的基本区别是什么,但我建议直接查看 CMake 文档。

c̵̛o̝̪m̯ە̖̰̙ۡp̭ۚ̕ۓ̮̲ḭۓۇۦl̪ۈiۉ̵̹̼̗ۗۓۉn̰̼g̩̩̳̯ ̻̯̹̦̱̠̰w̬̜̕i̖̗̗̭̗̗̓̕

我不知道你正在使用的库是如何设计的,但如果头文件中没有构造函数的定义,它显然不是只有头文件。 因此,您要么必须链接到该库,要么将其实现文件(如果有(添加到您的项目中,以便链接器获得您所承诺的内容。我建议查看target_link_libraries以查看如何在CMake中进行链接(不过还有更多方法可以做到这一点(。

未定义的引用错误通常意味着链接器未找到标头中播发的内容。

解决方案是从.cpp文件中编译库,并创建一个引用这些库的干净CMakeList文件,然后解决了未定义的引用错误。