我正在使用三个不同的库,一个 Core (可以编译为静态或DLL),图形(可以编译为静态或DLL - 处理Ogre ),物理(由于许可,可以编译为静态 - Havok)。然后,项目根据需要使用库的组合。 物理部分依赖于图形和核心的某些功能,而图形依赖于某些功能核心。该项目适用于调试和发布中静态链接的所有库。使用核心和图形的动态链接库时会出现以下错误,但是静态链接的物理库。
错误1错误LNK2005:“public: unsigned int __thiscall OgreFW :: FwErrorLog :: GetError(无效)” (?GetError @ FwErrorLog @ OgreFW @@ QAEIXZ) 已定义于 FwCore_d_dll.lib(FwCore_d.dll)FwHavok_d.lib
我可以看到错误意味着什么,但我对如何规避这个问题感到困惑。如果我的库像这样彼此依赖,并且物理引擎(Havok)的许可仅允许静态链接,我是否需要重新考虑我的设计(这是一个大问题:()还是有办法绕过它?
由于
编辑:我已经检查过以确保使用 MDd
编译所有库 EDIT2:我可以使用/FORCE:MULTIPLE
,但这是隐藏问题而不是解决问题
EDIT3:为几次编辑道歉。函数 GetError()在标题中定义,如果我将它放在源文件中,链接错误就会消失。那是为什么?
答案 0 :(得分:0)
那不是你的答案吗?动态链接对这种情况有什么好处?“该项目适用于调试和发布中静态链接的所有库。”
答案 1 :(得分:0)
我找到了一个解决方案,但我不知道它为什么会起作用。如果在标题中定义的所有函数(而不仅仅是一个)给出了链接错误,那么将会有一个解释,但是没有,只有两个。
无论如何,解决方案是将函数的定义放在源文件中。为什么这样做?如果有人对此有解释,那就太棒了。