2

我在 Visual Studio 2010 中使用 C++。我正在尝试构建一个客户端和服务器都依赖于同一个“引擎”的客户端-服务器架构

以下是解释这一点的图表:

图片 http://img266.imageshack.us/img266/5573/dependencies.png

在哪里:

引擎- 特定于应用程序的引擎

BaseEngine - 非特定于应用程序的引擎(由其他应用程序使用)

SomeLibrary - BaseEngine 所依赖的库

使用 Visual Studio,我设置了适当的项目引用和“包含目录”。

Client能够看到 Engine 中的方法,而Engine能够看到BaseEngine中的方法。但是问题是当客户端和/或服务器调用引擎上的方法时,我遇到了一些链接错误(LNK1120、LNK2001)。

似乎发生这种情况是因为引擎依赖于 BaseEngine 而客户端不依赖于 BaseEngine。

所以我的问题是:

无论如何,Engine 和 BaseEngine 项目是否可以打包,以便客户端和服务器不需要引用 BaseEngine?

4

1 回答 1

2

问题是:链接器错误是否与 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 中的函数。

于 2012-06-09T07:34:02.770 回答