c++ - 在另一个库中链接一个库,仍然必须在最终项目中链接它

标签 c++ visual-studio static linker static-libraries

所以我的项目看起来像这样:

游戏(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/

相关文章:

c++ - Spirit 无法将属性分配给单元素结构(或 fusion 序列)

c++ - 如何在 C++/Rcpp 中进行快速百分位数计算

c++ - 将 python numpy 数组转换为 C++ STL vector

c++ - x509 证书主题备用名称

c++ - 无法在列表迭代器中获取 sf::Text 属性

css - 在 Sinatra 中提供静态文件时出现问题

java - 只有 "static"的方法签名如何工作?

c - 关于 "static"的用法,非常基本

c++ - Visual Studio Profiler 不显示源代码位置

visual-studio - 我想要标准化的行尾吗?