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

标签 c++ visual-studio-2010 dependencies word-wrap libs

我正在使用 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/

相关文章:

c++ - enum 类型不能接受 cin 命令

c# - 为什么 Microsoft.Build.Evaluation 在 64 位 PC 上将 $(ProgramFiles) 评估为 "c:\program files"?

java - Maven 项目对 JDK 版本的依赖

c - Visual Studio 2010 问题中的链表

c# - 一个项目里面有两个表单,每个表单建两个独立的exe文件

Linux:如何找出我的库的哪个(子)依赖项需要特定的库?

gcc - make 删除依赖文件

c++ - 为什么 int* ptr_arr_int = {1,2};在 C/C++ 中不起作用?

java - 寻找最大乘积的算法方法

c++ - 在 C/C++ 中 x[i] * y[i++] 总是等于 x[i] * y[i]