gpt4 book ai didi

c++ - hpp 和 cpp 文件添加到库时出现链接器错误

转载 作者:太空宇宙 更新时间:2023-11-04 14:18:42 26 4
gpt4 key购买 nike

我正在使用开发 C++。我还从一个图书馆得到了助手,这是由其他人为我自己的 C++ 项目开发的。我在库中添加了两个名为 TriangleListTriangleLists 的新类,因为我想为项目添加新的类类型。有一次,我将 hpp 和 cpp 文件添加到库中,得到了类似 creating ../lib/libExtraction.a 的消息。然而,当我从我自己的项目中回调我在新类中编写的函数时,我得到了类似

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

(上面那个是删除功能)然后,当我删除 .cpp 文件并将所有内容写入 .hpp 时,它就可以工作了。

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

最佳答案

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

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

但是,当您将 header 包含在不同的项目中时,您需要指定导入该类,因此:

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。这样,在构建第一个项目时,您将导出类,而在另一个项目中包含 header 时,您将导入它。

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

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

关于c++ - hpp 和 cpp 文件添加到库时出现链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9266114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com