C++ 混合静态和动态(共享)库?

C++ 混合静态和动态(共享)库?,c++,dynamic-linking,static-linking,mixing,C++,Dynamic Linking,Static Linking,Mixing,我正在使用三个不同的库,一个核心(可以编译为静态或DLL)、图形(可以编译为静态或DLL-与食人魔打交道)、物理(只能在授权的情况下编译为静态-Havok)。然后,项目根据需要使用库的组合。物理部分取决于图形部分和核心部分的一些功能,而图形部分取决于核心部分的一些功能。该项目可以很好地处理调试和发布中静态链接的所有库。当使用核心和图形的动态链接库,但使用静态链接的物理库时,我会出现以下错误 错误1错误LNK2005:“公共: 未签名整数\uuuu此调用 OgreFW::FwErrorLog::G

我正在使用三个不同的库,一个核心(可以编译为静态或DLL)、图形(可以编译为静态或DLL-与食人魔打交道)、物理(只能在授权的情况下编译为静态-Havok)。然后,项目根据需要使用库的组合。物理部分取决于图形部分和核心部分的一些功能,而图形部分取决于核心部分的一些功能。该项目可以很好地处理调试和发布中静态链接的所有库。当使用核心图形的动态链接库,但使用静态链接的物理库时,我会出现以下错误

错误1错误LNK2005:“公共: 未签名整数\uuuu此调用 OgreFW::FwErrorLog::GetError(无效)” (?GetError@FwErrorLog@OgreFW@@QAEIXZ) 已在中定义 FwCore\u d_Udll.lib(FwCore\u d.dll)FwHavok\u d.lib

我知道这个错误意味着什么,但我对如何规避这个问题感到困惑。如果我的库像这样相互依赖,而物理引擎(Havok)的许可证只允许静态链接,那么我需要重新考虑我的设计(这是一个大问题:())还是有办法解决

谢谢

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

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

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

“在调试和发布中,所有静态链接的库都可以正常工作。”


这不是你的答案吗?动态链接在这种情况下有什么好处?

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


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

因为它是一个将用于许多项目的框架,DLL的优点将保持不变(快速链接、更新而无需重新编译)我也想知道这个问题的解决办法,而不是回避它。