如何创建使用其他库的库?

Posted

技术标签:

【中文标题】如何创建使用其他库的库?【英文标题】:How to create library that uses some other libraries? 【发布时间】:2020-07-26 16:54:26 【问题描述】:

我正在尝试创建一个图形库(没什么大不了的,只是为了学习东西)。在 Visual Studio 中,我有一个解决方案和两个项目 - dll 和 exe。对于窗口管理,我使用 GLFW 库。在我自己的窗口类中,我希望有一个 GLFW 窗口结构的私有成员。问题是我的 exe 项目不知道 GLFW 是什么 - 它不知道在哪里可以找到 #include <glfw/glfw3>

我的问题是 - 创建使用其他库的此类库的正确方法是什么?将 exe 项目设置为包含所有这些库对我来说听起来不是一个好主意。

【问题讨论】:

使用其他库的 DLL 项目的设置方式与使用其他库的 EXE 项目完全相同。 您是在谈论库还是包含?他们不一样。如果你想使用glfw3(甚至来自你的DLL),你必须包含glfw3标头。 @Manuel 我想使用 GLFW 库,所以在 dll 项目中我包含<GLFW/glfw3.h>。但是 exe 项目不知道 GLFWWindow 是什么,因为它不知道在哪里可以找到那个头文件。你的意思是我也应该在我的 exe 项目中包含这个文件? @OftenDeadKanji 是的。它必须知道 类型,并且会从 DLL 获取其他所有内容(对象、函数等)。 @OftenDeadKanji 很高兴您找到了处理方法。您可以针对自己的问题撰写回复并接受它,以便其他人可以从您的经验中学习。 【参考方案1】:

由于您使用的是 Visual Studio,因此 Microsoft 文档是获取信息的好地方。 https://docs.microsoft.com/en-us/cpp/build/dlls-in-visual-cpp?view=vs-2019 他们有关于 DLL 以及如何创建它们以及如何将 DLL 链接到项目的描述。

【讨论】:

【参考方案2】:

感谢@Manuel,我知道了如何做到这一点:dll 和 exe 项目,必须包含库的头文件。

我的解决方案:在 dll 中我使用预编译的头文件,因此所有库的头文件都包含在具有相对路径的文件中。在 dll 项目设置中,我放置了正确的路径,以便任何库文件都知道如何找到它们的标题。重要的是我的 exe 项目包含我的 dll 中的一个头文件,并且该文件包含预编译的头文件,因此 exe 项目“知道”它需要的关于库的一切。

再次感谢@Manuel 的帮助!

【讨论】:

以上是关于如何创建使用其他库的库?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复创建使用 PRIVATE include_directories 的库的 cmake 配置

如何使用Arduino的库?

如何创建包含静态库的 pod?

打印定义给定符号的库的名称

Git:如何管理 C# 库的依赖关系? [关闭]

如何在arduino中制作另一个类库的实例变量