目前,我的visual studio基本上是生成Engine.dll和Game.exe
Engine.dll链接到其他一些基本库,如: d3dx9d.lib、ComCtl32.lib、WinMM.lib、WSock32.lib等。
我也想尝试创建一个Engine.lib,但是现在我得到了一些非常好的警告: Symbol x已经定义好了。这些库定义了相同的符号。
所以我在某处读到,我必须强制我的用户(Game.exe)链接到库。但我认为这真的很不方便,特别是如果我有很多游戏,并且我决定在我的引擎中添加另一个库。这只是对这么简单的东西的维护。
我应该坚持使用.dll,或者有什么方法可以修复这个美丽的东西?
非常感谢,
Antoon
发布于 2010-12-28 21:54:07
您是否创建了不同的名称空间以避免命名冲突?
编辑--似乎对您要问的问题有些困惑,因为您问了几个问题。
在我看来,您似乎想尝试实现自己的引擎类。然而,你有命名的问题。我现在更多地将其视为一个架构问题。如果你把你的游戏写到一个接口上,那么这个问题就会消失。例如,如果您的引擎使用不同的算法,那么如果您已经编写了当前引擎和YourEngine实现的EngineInterface,那么您可以很容易地使用策略在不同的实现之间动态切换。这很好,因为如果您将首选项连接到应用程序中,您将能够看到游戏中的差异。
发布于 2010-12-28 22:02:36
你需要决定是要DLL还是静态链接库。DLL的优点是,如果您进行本地更改,则构建时间可以更快。.lib的优点是最终只有一个可部署的文件。
链接它(静态.lib或dll的导入.lib)是自动的。你想要确保首先构建这个库,没有它就不能链接.exe。右击“解决方案资源管理器”窗口中的“项目依赖项”中的exe项目,勾选该库项目。这会自动将.lib添加到exe项目的其他依赖项中。
在引擎头文件中使用#杂注注释(lib,"engine.lib")是另一种方式。对操作系统导入库等其他依赖项重复上述步骤。获得正确的库路径是一个// todo项目。
发布于 2010-12-28 21:58:25
如果符号不应该是相同的,请使用不同的名称或控制它们的公开方式。另一种选择是使用名称空间来避免命名冲突。
如果这两个符号应该是同一个东西,那么你只需要在其中一个库中定义一次。
https://stackoverflow.com/questions/4546507
复制相似问题