在向库中添加简单类时获取未定义的引用错误

时间:2011-07-25 19:22:02

标签: c++ cmake linker-errors undefined-reference

我正在使用一个相当大的库,它使用CMake进行编译/链接。我需要添加一些功能,因此我需要向库中添加一些类。问题是,当我向库中添加一个简单的helloWorld类,并尝试从某个main函数调用它时,我在链接时遇到未定义的引用问题。当我查看构建的代码(库文件夹中的“CMakeFiles”)时,我的类还没有被CMake编译(因此,例如,那里没有HelloWorld.o文件)。

有人可以指出我哪里错了吗?我是否需要明确地告诉CMake编译这个类? (如果是,怎么样?)。我是CMake的新手,所以不知道如何解决这个问题。

我这样调用这个函数。 ``

GSROrdinary sord;

我得到的错误信息是这样的。

undefined reference to beep::GSROrdinary::GSROrdinary()
undefined reference to beep::GSROrdinary::~GSROrdinary()

2 个答案:

答案 0 :(得分:2)

是的,你需要告诉CMake编译你的课程。我建议您查看一些可以在网上找到的CMake教程。这是一个很好的:http://www.cs.swarthmore.edu/~adanner/tips/cmake.php - 特别注意CMakeLists.txt文件和语法。您必须修改lib的CMakeLists.txt才能添加新类。

答案 1 :(得分:1)

您必须将新文件显式添加到CMake文件中,以便进行编译和链接。

这个commented sample可以给你一个开始(基本上你必须在你的一个CMakeLists.txt文件中查找add_library (LIBNAME files)指令并在那里添加你的新文件,但你也应该阅读documentation