.dll.a類型文件是MinGW下的DLL文件的imp-lib,即與MSVS下DLL文件附帶了一個引入庫.lib類似。在MSVS下編程,當要使用DLL文件時,在開發時必須要有.lib文件才能鏈接通過。在MinGW無需imp-lib庫文件的幫助,可直接與.dll文件鏈。在大多數情況下,.dll.a文件不起作用。
例如鏈接參數為 -lxxx,編譯器會在LD_LIBRARY尋找以下文件:
-
libxxx.dll.a
-
xxx.dll.a
-
libxxx.a
-
libxxx.dll
-
xxx.dll
按照mingw自己的規范,dll文件一般放在bin目錄下,開發人員利用-L選項自己制定鏈接庫路徑,而靜態庫及import-library目錄為/lib。
note: ld有一選項-dll-search-prefix=<prefix>,可以指定鏈接庫的前綴,例如-dll-search-prefix=cui,表示靜/動鏈接庫默認的前綴為cui,cuiabc.a, cuiabc.dll,只需指定-labc即可。
由於存在以下兩個原因,import Library還有存在的必要:
-
到目前為止, link-directly-to-dll功能對於auto-imported類型的鏈接庫不起作用;
-
編譯器需要從import library輸入import-library中的純靜態object(即.dll.a文件只包括dll文件的間接尋址索引)。
在需要.dll.a文件的情況下,如何解決:
-
ln -s xxx/bin/abc.dll xxx/lib/abc.dll.a
-
利用build utility借助.def文件生成import-library,並將其放到lib目錄下。
轉自:https://blog.csdn.net/imsaws/article/details/15341347