2011-10-08 93 views
0

我有一個靜態庫的問題。我需要在一個DLL中使用2個不同版本的相同SDK,而不會發生名稱衝突。我認爲解決方案是爲每個SDK版本創建2個靜態庫,然後將這些庫導入到DLL中。但這種解決方案的工作奇怪,我不知道爲什麼....靜態庫

簡化的情況是這樣的:

LIB1 - 有功能ADD1它使用的東西從SDK 1.0

LIB2 - 有功能ADD2從SDK 2.0

DLL-進口LIB1和LIB2使用的東西,有功能的添加(浮動版),調用ADD1或ADD2 - 取決於版本號參數

編譯過程是確定的,但DLL工程只有一個版本的SDK :(

當我調試它時,我看到該程序調用參數中的版本2.0與DLL添加函數。然後添加真的調用Add2 - 所以這仍然是正確的。但是,然後在Add2函數中,它使用SDK 1.0中定義的東西而不是SDK 2.0! LIB2實際上是使用SDK 2.0創建的。 (包括dirs和lib dirs被設置爲SDK 2.0)

那麼爲什麼它使用SDK 1.0? :(

是因爲連接的,當我從SDK 2.0 1.0倍率的符號創建SDK DLL和符號,其中加入都在一起......(有沒有不同的命名空間)。

你有什麼想法在哪裏的問題,有什麼解決辦法???

非常感謝!

我使用Visual C++ 2010 ...

回答

2

你觀察到的可能是由該文庫中列出的順序造成的行爲在鏈接器選項中。試試l以相反的順序排列它們,你可能會觀察到「相反」的行爲。

我不認爲你能夠混合搭配具有相同符號的庫。最好的辦法是將至少一個庫(或兩者)封裝在單獨的DLL中,以便將不同的符號暴露給您的「客戶端」DLL(即不同的名稱空間或甚至不同的名稱)。