Visual Studio 2010 C ++ - 如何包装.lib文件以供重用

时间:2012-06-09 06:47:05

标签: c++ visual-studio-2010 dependencies wrapping libs

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

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

image http://img266.imageshack.us/img266/5573/dependencies.png

其中:

引擎 - 特定于应用的引擎

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

SomeLibrary - BaseEngine依赖的库

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

客户端能够查看引擎中的方法,并且引擎可以查看 BaseEngine 中的方法。但问题是,当客户端和/或服务器调用引擎上的方法时,我得到一些链接错误(LNK1120,LNK2001)。

似乎发生了这种情况,因为引擎依赖于BaseEngine而客户端没有对BaseEngine的依赖。

所以我的问题是:

是否可以将Engine和BaseEngine项目包装起来,以便客户端和服务器不需要引用BaseEngine?

1 个答案:

答案 0 :(得分:2)

问题是:链接器错误是否与Engine.lib或BaseEngine.lib有关? 我假设您在BaseEngine.lib导出的函数中遇到问题,并在客户端/服务器中引用,导致符号无法解析。
如果您的客户端/服务器依赖于BaseEngine.lib导出的功能,但您只需引用Engine.lib,则必须直接引用BaseEngine库或使Engine.lib明确转发BaseEngine.lib提供的这些功能。
Engine.lib依赖于(和引用)BaseEngine.lib的事实并不意味着Engine.lib无缝转发BaseEngine.lib的功能。我猜你是在绊倒这个假设。链接器只包含从BaseEngine.lib到Engine.lib的功能(如果确实需要它们)。但是,除非您明确这样做,否则这些功能对于其他依赖项(在您的情况下为客户端/服务器)都不可见。我建议你在Engine.lib中编写一些包装器功能,以转发客户端/服务器引用的BaseEngine.lib中的函数。