MINGW32中dll,lib,a中的關係

一、MinGW中幾種文件之間的轉換

      以下引用自 http://hi.baidu.com/gjviootibjbgtyd/item/0d12b1f34cb3eeda6225d2b1

MinGW:

c -> o              gcc -c a.c
c -> exe          gcc a.c libs.o -o a.exe (從主程序a.c,附加libs,生成a.exe)
o -> exe          gcc a.o b.o ... -o main.exe
c -> dll,def,a   gcc a.c -shared -o a.dll -Wl,--output-def,a.def,--out-implib,liba.a
a -> dll             a2dll liba.a 
dll -> a:           dlltool --dllname a.dll --def a.def --output-lib liba.a (需要def文件)

a -> def:          dumpbin /exports lib.a > lib.def (在windows上調用,def需要修改)

                       有的MinGW版本無dumpbin.exe,不能使用dumpbin命令

                       可下載dumpbin.exe拷貝到C:\MinGW\bin目錄下(未找到可以的dumpbin.exe)

dll -> def :       pexports a.dll -o > a.def (這裏的-o是指給函數標序號)

                       如pexports命令不能使用可在如下地址下載

                       http://sourceforge.net/projects/mingw/files/MinGW/Extension/pexports/pexports-0.46/

                         pexports-0.46-mingw32-bin.tar.xz文件,解壓,拷貝到C:\MinGW\bin目錄下

lib -> def :       reimp -d a.lib

lib -> a:           (for __cdecl functions in most case) reimp a.lib; (for __stdcall functions)


二、在MinGW下使用自己編譯的動態庫

       在MinDW中通過libXXX.a文件調用libXXX.dll動態庫。

        輸入gcc -o build XXX.c -lXXX 編譯不能通過,找不到調用的庫函數。

        輸入gcc -o build XXX.c /***/libXXX.a 編譯成功。


三、在MinGW下編譯源碼是不能生成動態庫

      在make之後出現錯誤:

          libtool: link: warning: undefined symbols not allowed in i686-pc-mingw32 shared libraries。

          解決辦法:打開Makefile 在LDFLAGS 選項後面添加 -no-undefined 編譯選項。

          執行make編譯成功,但該編譯過程可能不會生成.lib文件,.a文件會生成。

          拷貝.dll到vc中使用時不能鏈接動態庫這時要手動生成.lib文件。(沒有找到直接生成.lib的方法)

          1、生成.def 文件     pexports libXXX.dll > libXXX.def

               cat libXXX.def 有如下信息則成功

                     LIBRARY libXXX.dll
                          EXPORTS

                          fun              @1

             2、生成.lib文件      dlltool --dllname libXXX.dll --def libXXX.def --output-lib libXXX.lib

             生成lib文件,將libXXX.dll文件和libXXX.lib文件拷貝到vc工程目錄在cpp文件中加入

             #pragma comment(lib,"libXXX.lib")   即可使用


參考資料:

http://hi.baidu.com/gjviootibjbgtyd/item/0d12b1f34cb3eeda6225d2b1

http://blog.sina.com.cn/s/blog_71d9aee40100ssnm.html

http://mingw.5.n7.nabble.com/Using-dlltool-to-create-a-lib-for-MSVC-td17116.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章