我已经看过这个答案了,但我似乎找不到适合我的情况的解决办法。
我刚开始用C++和Clion工作。 我做了一个基本的测试项目,它包括一个头文件和main函数,然后从包含的类中执行一个方法--所有的工作都很好,CLion编译器是mingw。
现在,我需要做的真正项目集成了一个供应商用C++编写的SDK。 他们也有例子。 每次我运行它们时,CLion都会破坏构建并抱怨未定义的引用。。。 include文件路径都是正确的,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();
...
}
有什么建议吗?问题出在哪里?
因为目前的情况,我无法联系到他们那边的任何人,所以我想我在这里问一下。。。
谢啦!
我对CMake并不熟练--但是如果使用外部SDK,您可能还必须使用类似target_link_libraries()
/target_link_directories()
的东西链接库/目录。 在我看来,你只是简单地告诉编译器“嘿,这是我的SDK头,做点什么”,但是编译器不知道这个SDK的符号在哪里定义。 这里对两者之间的基本区别进行了一点解释,但我建议直接查看CMake文档。
C,M,P,I,I,G,W,I,TH,C,M,D,K,E,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D
我不知道您使用的库是如何设计的,但是如果头文件中没有构造函数的定义,那么它显然不是仅头文件。 所以你要么链接到那个库,要么把它的实现文件(如果你有的话)添加到你的项目中,这样linker就得到了你承诺的东西。 我建议查看target_link_libraries
,看看如何在CMake中链接(不过还有更多的方法)。
未定义引用错误通常意味着链接器没有找到在标头中通告的内容。