2011-06-04 196 views
8

我想用兩個靜態鏈接庫來編譯我的程序:SFML和PhysFS。然而,在鏈接階段我得到了以下錯誤:不同庫之間的命名衝突

eror LNK2005:_inflatePrime已經定義SFML-圖形s.lib(inflate.obj)
錯誤LNK2005:_inflateGetHeader已經定義SFML,圖形 - (inflate.obj)
錯誤LNK2005:已在sfml-graphics-s.lib(adler32.obj)中定義_adler32_combine
錯誤LNK2005:_crc32_combine已在sfml-graphics-s.lib(crc32.obj)中定義
錯誤LNK1169:找到一個或多個多重定義符號

當兩個完全無關的圖書館有這種衝突時,我該怎麼辦?

編輯:哦,請 - 請告訴我我不會寫封裝。我已經厭倦了不得不開始工作,我只想寫我自己的代碼。 :(

+2

第一個問題是你使用C還是C++? – 2011-06-04 13:04:44

+0

@Neil It's C++。 – 2011-06-04 13:06:15

回答

9

李都braries似乎更願意包含zlib庫而不是依賴它。我試圖在沒有這個包含的情況下構建它們,並將可執行文件與zlib鏈接起來。

+0

非常感謝,我擔心我將不得不經歷另一輪令人心碎的工作。如果其他人有類似的問題,並且他們正在使用Visual Studio,請查看此鏈接以獲取快速而骯髒的臨時解決方案:http://msdn.microsoft.com/en-us/library/70abkas3%28v=VS。 71%29.aspx – 2011-06-04 13:47:24

0

假設你有庫的源代碼,這可能是簡單的添加一些命名空間的在庫中的頭文件:

namespace LibA { 

    // existing function declarations 

} 

,並在C++源文件:

namespace LibA { 

    // existing code 

} 

同爲庫B,但有不同的命名空間的名字,我意識到這是一個痛苦,但如果庫確實有名稱衝突,它是最乾淨的方法。