mingw32/bin/ld.exe: skipping incompatible表示檔案位數跟系統位數不對,造成不相容,要重新生成。
將reimp copy至mingw的bin目錄下。因為mingw的bin目錄已經配置在環境變數,reimp.exe、dlltool.exe只能放在mingw\bin的目錄下才能正常生成.a檔案,放在其它目錄下就算能訪問,生成的檔案可能有問題。
c:\mingw\bin\reimp.exe
c:\mingw\bin\dlltool.exe
e:\program files\mysql\mysql-5.6.19-win32\lib\libmysql.lib
使用reimp和dlltool
進入cmd下
cd e:\program files\mysql\mysql-5.6.19-win32\lib
reimp -d libmysql.lib
dlltool -k -d libmysql.def -l libmysql.a
1.dlltool --input-def libmysql.def --dllname libmysql.dll --output-lib libmysql.a -k
2.dlltool -d libmysql.def -d libmysql.dll -l libmysql.a -k
-k kill @from exported names我分開兩次測試一次不加-k生成的檔案有問題,報找不到方法,編譯通過;另一次加-k引數,檔案正確,但是開啟檔案看裡面也有@n的引數,沒搞明白是什麼意思。
linux靜態庫命名規範,必須是"lib[your_library_name].a":lib為字首,中間是靜態庫名,擴充套件名為.a
搜尋時檔名去掉lib和字尾
libraries(-l) mysql 搜尋libmysql.a
libraries(-l) libmysql 搜尋libmysql.lib
總結:後來研究了下,發現不是所有的lib檔案都能生成def檔案,reimp.exe、dlltool.exe只能放在mingw\bin目錄下工作才正常,我把它複製到其它目錄,執行沒問題,但是生成的檔案有問題,開始裝的dev-c++是5.7.1版本,這版本雖然相容32位和64位,但在它裡面的mingw64\bin目錄生成a,竟然全是64位的,然後我的系統是32位,生成的東西都不能用。
根據 dll檔案生成 lib檔案
有些linux下的開源原始碼編譯後只生成.dll檔案,為了在vc中使用,需要生成.lib檔案。步驟如下 1.開啟visual studio命令提示視窗,切換到.dll路徑下 2.使用dumpbin命令 dumpbin exports libzbar 0.dll lib.txt lib.txt內容如下...
根據 def檔案生成lib檔案
原文 模組定義檔案是用來描述 dll 檔案的文字格式的檔案,其格式如下 library libdll.dll dll 檔案的檔名 description 描述資訊 描述資訊,此行可以不要 exports lib add 1 函式描述 lib sub 2 函式描述 第一行 在 library 後面填 ...
Keil MDK生成LIB庫以及使用LIB庫
問題引出 為什麼要做成lib庫?1 不想將自己寫的源 公開,但是同時庫檔案又需要讓別人能夠正常呼叫,那封裝成lib的格式就是乙個方法。2 編譯某些工程檔案時非常耗時,像st官方的庫時,由於檔案眾多,編譯一次可能得1兩分鐘,這時可以打包成庫,節省不少的時間。但同時也不能用右鍵go to definit...