添加到库中的hpp和cpp文件的链接器错误

时间:2012-02-13 18:48:00

标签: c++

我正在使用dev c ++。我也从一个图书馆获得助手,由其他人为我自己的c ++项目开发。我已经向库中添加了两个名为TriangleListTriangleLists的新类,因为我想要项目的新类类型。有一次,我将hpp和cpp文件添加到库中,我得到了像creating ../lib/libExtraction.a这样的按摩。 然而,当我从我自己的项目中回调我在新课程中编写的函数时,我得到了错误按摩,如

`[Linker error] undefined reference to `TriangleLists::Erase()`

(上面的一个用于擦除功能) 然后,当我删除.cpp文件并在.hpp中写入所有内容时,它可以工作。

但是,我想进一步为hpp和cpp维护两个文件。所以,请告诉我如何解决这个链接错误问题,因为我想学习这个。提前谢谢你。

1 个答案:

答案 0 :(得分:0)

您需要检查的第一件事是您是否正在导出课程:

class __declspec(dllexport) TriangleLists
{
//members
};

但是,当您在其他项目中包含标题时,您需要指定该类已导入,因此:

class __declspec(dllimport) TriangleLists
{
};

这通常通过预处理程序指令实现:

#ifdef BUILDING_FIRST_PROJECT
#define DLLIMPEXP _declspec(dllexport)
#else
#define DLLIMPEXP _declspec(dllimport)
#endif

//TriangleLists.h
class DLLIMPEXP TriangleLists
{
}

并且只在您的第一个项目中定义BUILDING_FIRST_PROJECT。这样,在构建第一个项目时,您将导出该类,当您在另一个项目中包含标题时,您将导入它。

第二件事是另一个项目必须链接到第一个项目生成的.lib文件。

将实现移动到标头时它起作用的原因是该方法变为inline,因此在lib文件中没有查找它,因为它的定义已经知道。