cygwin下dll和lib的生成方法
2010-01-06 上午 11:06
cygwin可以編譯生成windows下供呼叫的dll,包括vc可識別的lib。
cygwin-gcc:
cygwin自帶了乙個gcc, 用於把c/c++-source編譯成cygwin平台下的exe/dll (使用cygwin必須用其自帶的gcc, 因為內部會生成一些針對於平台的特定的初始化**, 如果用其餘版本的gcc則很有可能導致程式不能正常執行.)
在cygwin-shell中可直接使用gcc . 如下 :
gcc -shared ***.c -o ***.dll //編譯成dll, 注意, cygwin-gcc預設匯出所有的function.
gcc -c ***.c -o ***.o //編譯成obj
gcc ***.c -o ***.exe //編譯成exe
ar r ***.lib ***1.o ***2.o //打包多個obj成乙個lib (非連線)
gcc ***.c ./l aaa.dll -o ***.exe //引用外部dll生成exe
gcc ***.c yyy.c -o zzz.exe //連線多個c檔案, 生成exe.
gcc -i"/bin/include" -c ***.c -o ***.o //引用/bin/include目錄下標頭檔案,生成obj
gcc -l"dll.a" ***.c -o ***.exe //連線dll.a, 生成exe
如果想知道編譯時具體的資訊, 可以使用--verbose這個編譯選項, 對於了解gcc的工作是很有幫助的.
額外的,也可以寫自己的匯出lib檔案, 以方便其餘程式引用dll (如cobol2002編譯器就不支援直接引用dll, 這個時候可以寫乙個def, 並匯出lib檔案, 便於cobol2002使用)
具體方法如下:
1. 編譯生成dll :
如: gcc -shared mytest.c -o mytest.dll, 生成mytest.dll.
2. 寫乙個def檔案 (這裡是mytest.def), 簡單的格式大致如下:
library mytest //這裡的mytest對應於mytest.dll
exports
allocmemory @1 //匯出的第乙個function : 對應於mytest.dll裡面的allocmemory(...), 注意, 引數可不用寫
readmemory @2 //匯出的第二個function : 對應於mytest.dll裡面的readmemory-function.
//注意: function可以不用全部匯出, 可以只選擇你需要的function.
3. 用lib工具(vc6有提供)生成lib檔案 (這裡是mytest.lib) :
lib /def:mytest.def //預設生成的名稱為mytest.lib.
4. 到此生成完畢, 連線的時候只需要引用mytest.lib即可, 但要注意***.exe 和mytest.dll要放在同一目錄下.
可以用 gcc --help 檢視具體的命令 etc...
cygwin下dll和lib的生成方法
cygwin可以編譯生成windows下供呼叫的dll,包括vc可識別的lib。cygwin gcc cygwin自帶了乙個gcc,用於把c c source編譯成cygwin平台下的exe dll 使用cygwin必須用其自帶的gcc,因為內部會生成一些針對於平台的特定的初始化 如果用其餘版本的g...
windows環境下lib和dll的區別和聯絡詳細
c 中共有兩種庫 1 lib包含了函式所在的dll檔案和檔案中函式位置的資訊 入口 由執行時載入在程序空間中的dll提供,稱為動態鏈結庫dynamic link library。這種方式更靈活,寫的程式體積小,但是需要.exe和dll同時發布 2 lib包含函式 本身,在編譯時直接將 加入程式當中,...
lib和dll的區別
1 lib是編譯時需要的,dll是執行時需要的。如果要完成源 的編譯,有lib就夠了。如果也使動態連線的程式執行起來,有dll就夠了。在開發和除錯階段,當然最好都有。2 一般的動態庫程式有lib檔案和dll檔案。lib檔案是必須在編譯期就連線到應用程式中的,而dll檔案是執行期才會被呼叫的。如果有d...