2010-09-06 152 views
1

我有三個不同的庫工作,一個核心(可以被編譯爲靜態或DLL),圖形(可被編譯爲靜態或DLL - 與食人魔交易),物理(可以被編譯爲靜態只是由於許可 - Havok)。然後項目根據需要使用庫的組合。所述物理部分取決於圖形核心的一些功能,而圖形取決於核心的某些功能。該項目對調試和發佈中靜態鏈接的所有庫都正常工作。使用核心圖形的動態鏈接庫時出現以下錯誤,但使用靜態鏈接的物理庫庫。混合靜態和動態(共享)庫?

錯誤1錯誤LNK2005: 「市民: 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但隱藏着問題,而不是解決它

編輯3:道歉幾個編輯。函數GetError()在頭文件中定義,如果我將它放在源文件中,鏈接錯誤消失。這是爲什麼?

回答

0

我找到了一個解決方案,但我不知道它爲什麼起作用。如果頭中定義的所有函數(而不是一個函數)給出鏈接錯誤,將會有一個解釋,但不是,只有兩個。

無論如何,解決方案是將函數的定義放在源文件中。爲什麼這個工作?如果有人對此有解釋,那會很好。

0

「項目工作正常,所有庫在調試和發佈時都是靜態鏈接的。」

那不就是你的答案嗎?動態鏈接對於這種情況有什麼優勢?

+0

由於它是一個將被用於許多項目的框架,DLL的優點將保持(快速鏈接,更新而無需重新編譯)。我也想知道這個問題的解決方案,而不是側面的步驟。 – Samaursa 2010-09-07 04:57:52