我正在使用 C++ 和 Visual Studio 2010。我正在尝试构建客户端-服务器架构,其中客户端和服务器都依赖于相同的“引擎”
下图解释了这一点:
image http://img266.imageshack.us/img266/5573/dependencies.png
地点:
引擎 - 应用程序特定引擎
BaseEngine - 非应用程序特定引擎(由其他应用程序使用)
SomeLibrary - BaseEngine依赖的库
使用 Visual Studio,我设置了适当的项目引用和“包含目录”。
客户端能够看到引擎中的方法,引擎能够看到BaseEngine中的方法。然而问题是,当客户端和/或服务器调用引擎上的方法时,我遇到了一些链接错误(LNK1120、LNK2001)。
出现这种情况似乎是因为引擎依赖于 BaseEngine,而客户端不依赖于 BaseEngine。
所以我的问题是:
是否可以将 Engine 和 BaseEngine 项目打包,以便客户端和服务器不需要引用 BaseEngine?
最佳答案
问题是:链接器错误与 Engine.lib 还是 BaseEngine.lib 有关?
我假设您对 BaseEngine.lib 导出的函数存在问题并在客户端/服务器中引用,这会导致无法解析的符号。
如果您的客户端/服务器依赖于 BaseEngine.lib 导出的功能,但您只引用 Engine.lib,则必须直接引用 BaseEngine 库或让 Engine.lib 显式转发 BaseEngine.lib 提供的这些功能。
Engine.lib 确实依赖(并引用)BaseEngine.lib 的事实并不意味着 BaseEngine.lib 的功能是由 Engine.lib 无缝转发的。我猜你正在偶然发现这个假设。如果确实需要,链接器仅包含从 BaseEngine.lib 到 Engine.lib 的功能。但是,除非您明确执行此操作,否则这些功能对于进一步的依赖项(在您的情况下为客户端/服务器)都是不可见的。我建议您在 Engine.lib 中编写某种包装器功能,以转发客户端/服务器引用的 BaseEngine.lib 中的函数。
关于c++ - Visual Studio 2010 C++ - 如何包装 .lib 文件以供重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10959015/