我正在使用三个不同的库:Core (可以编译为静态库或DLL)、Graphics (可以编译为静态库或DLL -处理Ogre)、物理(只能由于许可-Havok而被编译为静态库)。然后,项目根据需要使用库的组合。物理部分依赖于Graphics和Core的某些功能,而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()是在头文件中定义的,如果我把它放在源文件中,链接错误就会消失。为什么会这样呢?
发布于 2010-09-08 04:41:38
我找到了解决办法,但我不知道为什么会起作用。如果在标题中定义的所有函数(而不仅仅是一个函数)都给出了链接错误,那么就会有一个解释,但是没有,只有两个函数。
无论如何,解决方案是将函数的定义放在源文件中。为什么要这么做?如果有人对此有解释,那就太好了。
发布于 2010-09-07 02:17:25
“该项目与调试和发布中静态链接的所有库一起工作得很好。
那这不是你的答案吗?动态链接对这种情况有什么好处?
https://stackoverflow.com/questions/3654881
复制相似问题