繁体   English   中英

.lib链接其他.lib

[英].lib linking other .libs

目前,我的视觉工作室基本上是在生成Engine.dll和Game.exe

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

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

因此,我读到某个地方,我必须强制我的用户(Game.exe)链接到这些库。 但这确实给我带来了不便,特别是如果我有很多游戏并且决定将另一个库添加到引擎中时。 仅仅是维护,就这么简单。

我应该坚持使用.dll,还是有某种方法可以修复此问题?

非常感谢,

安东

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

否则将其自动链接(静态.lib或dll的import .lib)。 您要确保首先构建该库,否则就无法链接.exe。 右键单击“解决方案资源管理器”窗口中的exe项目,在“项目依赖项”中,选中库项目。 这会自动将.lib添加到exe项目的其他依赖项中。

在引擎的头文件中使用#pragma comment(lib,“ engine.lib”)是另一种方法。 对其他依赖项(如OS导入库)重复上述步骤。 确保正确的库路径是// //待办事项。

您是否创建了其他名称空间以避免命名冲突?

编辑-似乎对您要问的内容有些困惑,因为您要问几个问题。

对我来说,听起来您想刺痛实现自己的Engine类。 但是,您遇到了命名问题。 我现在将其更多地视为体系结构问题。 如果您将游戏编写到界面上,那么问题就消失了。 例如,如果您的引擎使用不同的算法,那么如果您编写了当前引擎和YourEngine实现的EngineInterface,则可以轻松地使用Strategy在运行中的不同实现之间进行切换。 很好,因为如果您将首选项连接到应用程序中,便可以看到游戏中的差异。

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

如果这些符号应该是同一对象,则只需在一个库中定义一次即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM