CLion - 无法解决类中对构造函数的未定义引用
CLion - cannot solve undefined reference to constructor in class
我已经看过这个 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文件,然后解决了未定义的引用错误。
- (SFML)按下键时,播放器构造函数未使用正确的动画进行更新
- 在类构造函数中定义结构变量的参数
- C++ 构造函数未显示输出
- 2个模板化类的非模板友元函数未定义引用错误
- 为什么为派生类定义复制构造函数需要定义基类的默认构造函数?
- 构造函数中定义的类函数的默认参数
- C++:在共享对象中调用抽象基类构造函数/未定义的符号
- 获取线函数未定义错误。无法在字符串中保存可验证的内容
- 链表复制构造函数 |未定义的行为
- 如何在类的构造函数中定义成员向量的大小
- 尝试使用 std::函数(未定义的符号)声明模板化类状态时出现链接错误
- 构造函数未按预期工作
- MSVC 2017中STL容器的移动构造函数未标记为NOExcept
- Pimpl with unique_ptr : 为什么我必须将接口构造函数的定义移动到".cpp"?
- C++移动构造函数未调用
- 专用纯虚拟模板函数(未定义引用)的另一个问题
- 在同一标头中定义但在类外部定义的模板构造函数未标识
- C++构造函数未定义的引用
- 重新定义的复制构造函数未执行
- Cocos2d-x Box2D CContactListener构造函数未定义