2010-09-06 139 views
1

我有三个不同的库工作,一个核心(可以被编译为静态或DLL),图形(可被编译为静态或DLL - 与食人魔交易),物理(可以被编译为静态只是由于许可 - Havok)。然后项目根据需要使用库的组合。所述物理部分取决于图形核心的一些功能,而图形取决于核心的某些功能。该项目对调试和发布中静态链接的所有库都正常工作。使用核心图形的动态链接库时出现以下错误,但使用静态链接的物理库库。混合静态和动态(共享)库?

错误1错误LNK2005: “市民: unsigned int类型__thiscall OgreFW :: FwErrorLog :: GetError(无效)” 已经定义 (?GetError @ FwErrorLog @ OgreFW @@ QAEIXZ) 在 FwCore_d_dll.lib (FwCore_d.dll)FwHavok_d.lib

我可以看到错误的含义,但我很困惑如何规避这种情况。如果我的库像这样依赖于对方,并且物理引擎(Havok)的许可只允许静态链接,我是否需要重新考虑我的设计(这是一个大问题:()或者是否有解决方法?

感谢

编辑:我已经检查,以确保所有的库正在与编译MDD

EDIT2:我可以使用/FORCE:MULTIPLE但隐藏着问题,而不是解决它

编辑3:道歉几个编辑。函数GetError()在头文件中定义,如果我将它放在源文件中,链接错误消失。这是为什么?

回答

0

我找到了一个解决方案,但我不知道它为什么起作用。如果头中定义的所有函数(而不是一个函数)给出链接错误,将会有一个解释,但不是,只有两个。

无论如何,解决方案是将函数的定义放在源文件中。为什么这个工作?如果有人对此有解释,那会很好。

0

“项目工作正常,所有库在调试和发布时都是静态链接的。”

那不就是你的答案吗?动态链接对于这种情况有什么优势?

+0

由于它是一个将被用于许多项目的框架,DLL的优点将保持(快速链接,更新而无需重新编译)。我也想知道这个问题的解决方案,而不是侧面的步骤。 – Samaursa 2010-09-07 04:57:52