【问题标题】:link a library within another, still have to link it in the final project在另一个库中链接一个库,仍然必须在最终项目中链接它
【发布时间】:2015-01-26 10:46:44
【问题描述】:

所以我的项目是这样的:

游戏(exe) 核心(库) Assimp (库)

我在 Core 中链接了 Assimp。在那里,我创建了一个包含 assimp 标头的类。 游戏链接核心。 现在,如果我在使用 assimp 标头的类的 Game 中创建一个对象,它会说它找不到头文件。

那么如何让它工作,所以我不必在游戏中链接assimp?

【问题讨论】:

  • “找不到头文件”与链接可执行文件无关。你是说不知道标题在哪里就不会编译
  • 没有头文件就无法编译,但它们应该在核心库中。

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


【解决方案1】:

链接静态库和包含项目标头之间存在区别: C++ : Difference between linking library and adding include directories

您说您已将 assimp 链接到核心内部,但这是不可能的,需要将静态库链接到使用它的可执行文件中,但是它们无法链接其他静态库。 我猜你的意思是你已经在核心项目中包含了 assimp 的头文件,这是正确的,但是如果你通过核心项目暴露了任何 assimp API,那么你还需要在任何其他项目中包含 assimp 头文件使用核心。如果您想避免这样做,您可以通过仅在 .cpp 文件中包含它的标头来隐藏 assimp API。

游戏项目还需要链接 BOTH core 和 assimp,因为两者都需要链接到最终的可执行文件中,

微软对使用静态库的看法: 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的位置

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多