所以我的项目看起来像这样:
游戏(exe) 核心(库) Assimp(库)
我在 Core 中链接了 Assimp。我在那里创建了一个包含 assimp header 的类。 游戏链接核心。 现在,如果我在使用 assimp header 的类的游戏中创建一个对象,它会说找不到 header 文件。
那么如何让它工作,这样我就不必在游戏中链接 assimp 了?
最佳答案
链接静态库和包含项目 header 之间存在差异: C++ : Difference between linking library and adding include directories
您说您已经将 assimp 链接到核心内部,但这是不可能的,静态库需要链接到使用它的可执行文件中,但是它们不能链接其他静态库。 我猜你的意思是你已经在核心项目中包含了 assimp 的头文件,这是正确的,但是如果你通过核心项目公开了任何 assimp API,那么你还需要在任何其他项目中包含 assimp 头文件使用核心。如果您想避免这样做,您可以通过仅将其 header 包含在 .cpp 文件中来隐藏 assimp API。
游戏项目还需要同时链接 core 和 assimp,因为两者都需要链接到最终的可执行文件中,
Microsoft 对使用静态库的评价: https://msdn.microsoft.com/en-us/library/ms235627.aspx
澄清的简要示例:
核心项目头文件,core.h
#include <assimp.h>
游戏头文件,game.h
#include <core.h>
现在通过游戏项目包含core.h时,assimp.h也包含在内,这意味着游戏需要知道assimp.h的位置
关于c++ - 在另一个库中链接一个库,仍然必须在最终项目中链接它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28148651/