首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >混合静态和动态(共享)库?

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

Stack Overflow用户
提问于 2010-09-06 23:41:43
回答 2查看 2.4K关注 0票数 1

我正在使用三个不同的库:Core (可以编译为静态库或DLL)、Graphics (可以编译为静态库或DLL -处理Ogre)、物理(只能由于许可-Havok而被编译为静态库)。然后,项目根据需要使用库的组合。物理部分依赖于GraphicsCore的某些功能,而Graphics依赖CoreE 215的某些功能。该项目与调试和发布中静态链接的所有库一起运行良好。当使用Core和Graphics的动态链接库但使用静态链接的物理库时,我会得到以下错误。

Error 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()是在头文件中定义的,如果我把它放在源文件中,链接错误就会消失。为什么会这样呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-08 04:41:38

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

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

票数 0
EN

Stack Overflow用户

发布于 2010-09-07 02:17:25

“该项目与调试和发布中静态链接的所有库一起工作得很好。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3654881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档