引用MinGW生成的.dll.a后出現的問題


以前很少調用MinGW的運行時庫,現在用到一個項目,用到了glib和gettext等。
遇到了一個問題,折騰了一個下午。
gettext的運行時庫之一是intl,MinGW只提供了.dll.a,於是參考了網上其它的介紹,像其它.lib一樣調用

pragma comment(lib, "libintl.dll.a")

結果就出現了
無法定位程序輸入點 GdiplusStartup於動態鏈接庫libintl-8.dll上。
我堅信libintl沒有用到GDI+,Depends查看dll后證明了我的觀點,但是Depends查看引用它的exe,卻發現exe認為GdiplusStartup在libintl.dll上。

只能證明一個問題,.dll.a和.lib不一樣。

那么需要找到相應的.lib,網上有自己編glib的辦法,看了看,環境搭建也比較復雜。后來想到一個問題,lib不過是dll導出庫的一個說明,那么一定有辦法通過dll生成lib。網上搜了后的確如此,意識到自己真的很土。
按網上說的下載pexports生成.def,然后lib命令生成dll后再導入,一切正常。

總結一下遇到的問題

  1. .dll.a,.a和.lib不一樣,像libx264.a等vs可以直接導入,我遇到的這個就不可以直接導入(實際上,我的DEBUG可以正常生成和運行,RELEASE生成是沒問題的,只是運行時出現上述問題,說明鏈接生成時是錯誤的,)。
  2. gettext有很多版本,網上下載一個msvc的版本可以直接用,但是要在安裝機器上部署多個不同版本的.dll,會使安裝包沒必要的增大。
  3. dll是可以生成.lib的,以后.a還是別用了,如果官方沒提供,就自己生成一個吧(.h文件沒辦法生成)。


免責聲明!

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



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