2009-06-05 19 views
2

...之間的編譯器間不兼容問題,跟進到this消除了與C++動態庫

從我已經給我的引用問題的答案我已經學會了:

  • 不同的編譯器使用不同的名字裝飾,這使得它不可能用C++動態庫的編譯器內置在一個用編譯器B構建的項目,
  • 該庫可以構建爲靜態存儲,包括項目中的n個頭文件和源文件或導出符號。 (它仍然不能保存重建庫,以便與不同的編譯器一起使用)。

根據已經說過的內容深入研究了SDL,我意識到,它的鏈接有兩層:在我的SDL項目中,我將靜態鏈接到libSDL.a,而後者將依次與SDL.dll進行動態鏈接,從而消除不同編譯器對不同.dll版本的需求。

問題是,這是否真的是這種情況和問題的可行解決方案,還是我錯過了什麼?

回答

3

我認爲你的方法是正確的。我把這種方式:

  • 一個DLL是由不同的編譯器可使用,它必須僅包含C函數(它們可被編譯使用C使用extern C ++編譯器)
  • 照例用的DLL,可以使用一個靜態導入庫,以便可以直接調用dll中的函數,而不需要按名稱加載
  • 而不是常規導入庫,您可以有一個包裝dll的C函數包裝在C++類別和功能
+0

感謝您指出(和抱歉):s aying「問題不存在與靜態庫」是明顯錯誤的。我現在要糾正它。 – zyndor 2009-06-05 18:35:31