2010-09-16 41 views
0

問候, 我面臨着在Windows下使用靜態庫的複雜情況。 靜態庫是由與Eiffel工作室捆綁在一起的特定版本的mingw構建的。由於Eiffel studio使用mingw將其輸出創建爲靜態庫,因此我無法控制此配置。 如果我嘗試在Eclipse CDT中使用這個靜態庫,它使用了更新版本的mingw,那麼我無法編譯我的項目。這是因爲我必須爲諸如winsock之類的各種庫提供-l選項,並且由於生成靜態庫的編譯器版本和我的代碼之間的差異,這似乎不起作用。如何使用不同版本的mingw使用靜態庫構建?

如果我強制Eclipse使用與Eiffel studio自帶的相同的mingw目錄,那就是編譯靜態庫的那個,然後我可以編譯我的代碼(雖然這裏還有其他一些問題) 我不想約束我的C++開發僅僅是因爲一個靜態庫是用特定版本的mingw構建的。

那麼如何從我自己的mingw版本使用這個靜態庫?這是Windows XP中順便說一句..

問候 謝雷夫

回答

1

雖然我沒有很多的信息在這裏是我會做什麼:

  1. 嘗試編譯與新版本明明,看看你能不能讓它工作。錯誤是在這種情況下非常重要(您也應該檢查的MinGW手動/郵件列表/論壇,發現有關的MinGW版本

  2. 單獨從程序庫和包裹其所有功能之間的兼容性 - 以避免不同的不兼容的編譯標誌(你可以創建一個不同的庫 - 甚至一個DLL並調用你的新函數(一些庫函數的包裝)

  3. 決定項目的哪個部分是必需的 - 包含庫或其餘部分的代碼

    1. 如果庫是強制性我將編譯代碼與該版本的MinGW的
    2. 否則我會嘗試找到該庫同等或消除它

其他選項可能存在,但這是我會做的(按此順序)

+0

謝謝。我已經用最新版本的mingw編譯了,這讓我從很多麻煩中解脫出來。我很好奇,是否有可能將一個靜態庫包裝在一個DLL中,以克服編譯器版本問題?我的意思是用舊版本編譯的dll,包裝靜態庫及其依賴關係? – mahonya 2010-09-17 11:44:07

+0

這取決於問題。通常,使用DLL(不管使用什麼編譯器構建它)**都會遇到問題**如果使用LoadLibrary和GetProcAddress解決符號問題,但是如果鏈接到DLL問題可能(通常會),因爲鏈接是每個開發套件特定的進程(即使在版本之間也可能不同),因此可能會出現問題。通過包裝舊的編譯器和導出函數 - 如果這是可能的! - (用GetProcAddress解決)你繞過這些問題。當然,代碼也必須更改爲使用GetProcAddress等。 – INS 2010-09-18 09:21:50

相關問題