MingW下動態鏈接庫常識


.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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM