2009年4月24日 星期五

MinGW和VC2008E之間...DLL編譯

測試程式,和相關操作,請參考之前兩篇文章(參考1 ,參考2 )

1. VC2008E使用MinGW產生的DLL檔
MinGW編譯DLL,可以產生testdll.def檔,然後利用VC的工具轉成VC相容的testdll.lib,如下:
lib /machine:i386 /def:testdll.def
之後產生的testdll.lib,隨同testdll.h,testdll.dll就可以和VC的專案做編譯連結了

PS1:MinGW產生的.lib,格式和VC不相容
PS2:可以使用VC提供的"Visual Studio 2008 命令提示字元",來做.def to .lib的轉換,它提供一個乾淨的VC建置環境,不過DOS的指令要有些印象...
PS3:透過.def轉換到.lib,然後連結後,產生的執行檔,就會找和.def同主檔名的.dll

2. MinGW使用VC2008E產生的DLL檔
VC編譯的DLL,基本上MinGW就可以用,不過要注意,在VC的設定裡,"呼叫慣例"(calling convention),要設成__cdecl,
若是__stdcall,就需要其他處理...
在VC2008的屬性頁視窗,組態屬性->C/C++->進階,呼叫慣例,改成__cdecl

編譯好後,將testdll.lib, testdll.h, testdll.dll,放到MinGW的專案目錄,就可以編譯連結了

後記:
這篇基本上就是參考MinGW的說明,只是筆記

相關連結:
http://www.mingw.org/wiki/MSVC_and_MinGW_DLLs
維尼的蜂巢:__stdcall ,__cdecl的區別
維尼的蜂巢:__stdcall ,__cdecl的區別 再次探討
http://msdn.microsoft.com/zh-tw/library/46t77ak2.aspx

沒有留言:

張貼留言