.lib链接其他.libs

时间:2010-12-28 13:45:57

标签: c++ visual-studio symbols static-linking

目前我的visual studio基本上是生成Engine.dll和Game.exe

Engine.dll链接到其他一些基本库,例如: d3dx9d.lib ComCtl32.lib WINMM.LIB WSock32.lib 等

我也想尝试创建一个Engine.lib,但现在我收到了一些非常好的警告:已经定义了符号x。这些库定义了相同的符号。

所以我读到某个地方我必须强迫我的用户(Game.exe)链接到libs。但是我认为这真的很不方便,特别是如果我有很多游戏,我决定在我的引擎中添加另一个库。这只是维护这么简单的东西。

我应该坚持.dll,还是有办法解决这个问题?

非常感谢,

安东

3 个答案:

答案 0 :(得分:2)

您需要决定是否需要DLL或静态链接库。 DLL的优点是,如果进行本地更改,构建时间可以更快。 .lib的优点是您最终只能使用一个可部署文件。

将其链接(静态.lib或dll的导入.lib)是自动的。您希望确保首先构建库,不能在没有它的情况下链接.exe。右键单击解决方案资源管理器窗口中的exe项目,项目依赖项,勾选库项目。这会自动将.lib添加到exe项目的其他依赖项中。

在引擎的头文件中使用#pragma comment(lib,“engine.lib”)是另一种方式。重复其他依赖项,如OS导入库。获得正确的库路径是// todo项目。

答案 1 :(得分:1)

您是否创建了不同的命名空间以避免命名冲突?

编辑 - 似乎对你所提出的问题感到困惑,因为你提出了几个问题。

对我来说,听起来你想要实现自己的Engine类。但是,您已经有了命名问题。我现在认为这更像是一个建筑问题。如果你将游戏写入界面,问题就会消失。例如,如果您的引擎使用不同的算法,那么如果您编写了当前Engine和YourEngine实现的EngineInterface,那么您可以轻松地使用策略在动态的不同实现之间进行切换。这很好,因为如果您将首选项连接到应用程序中,您将能够看到游戏中的差异。

答案 2 :(得分:0)

如果符号不相同,请使用不同的名称或控制它们的暴露方式。另一个选择是使用命名空间来避免命名冲突。

如果符号应该是相同的,你需要在其中一个库中只定义一次。