Cygwin下dll和lib的生成方法

2021-06-03 02:37:12 字數 1531 閱讀 2108

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...