繁体   English   中英

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

[英]Mixing static and dynamic (shared) libraries?

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

错误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() ,如果我将其放在源文件中,则链接错误将消失。 这是为什么?

“该项目与在调试和发行版中静态链接的所有库一起正常工作。”

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

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

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

暂无
暂无

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

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