1

我正在使用三个不同的库,一个核心(可以编译为静态或 DLL)、图形(可以编译为静态或 DLL - 处理 Ogre)、物理(只能由于许可而编译为静态 - Havok)。然后,项目根据需要使用库的组合。Physics部分依赖于GraphicsCore的某些功能,而Graphics依赖于Core的某些功能。该项目适用于调试和发布中静态链接的所有库。使用Core的动态链接库时出现以下错误图形,但静态链接的物理库。

错误 1 ​​错误 LNK2005: "public: unsigned int __thiscall OgreFW::FwErrorLog::GetError(void)" (?GetError@FwErrorLog@OgreFW@@QAEIXZ) 已在 FwCore_d_dll.lib(FwCore_d.dll) FwHavok_d.lib 中定义

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

谢谢

编辑:我已经检查过所有的库都是用MDd编译的

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

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

4

2 回答 2

0

“该项目适用于调试和发布中静态链接的所有库。”

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

于 2010-09-07T02:17:25.220 回答
0

我找到了一个解决方案,但我不知道它为什么有效。如果在标题中定义的所有函数(而不仅仅是一个)都给出了链接错误,那么会有一个解释,但不,只有两个。

无论如何,解决方案是将函数的定义放在源文件中。为什么这行得通?如果有人对此有解释,那就太好了。

于 2010-09-08T04:41:38.697 回答