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

时间:2010-09-06 23:41:43

标签: c++ dynamic-linking static-linking mixing

我正在使用三个不同的库,一个 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()在标题中定义,如果我将它放在源文件中,链接错误就会消失。那是为什么?

2 个答案:

答案 0 :(得分:0)

  

“该项目适用于调试和发布中静态链接的所有库。”

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

答案 1 :(得分:0)

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

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