使用reimp根據lib生成a檔案

2021-06-25 12:05:07 字數 1221 閱讀 2728

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