Qt 調用第三方庫


跨編譯器的動態庫

今天想用Qt去調用靜態庫,碰巧這個庫又是用Vs生成的,於是乎...

使用Qt生成一個靜態庫,並使用Qt程序去調用,程序正常編譯運行。但使用VS生成靜態庫,再使用Qt程序去調用,程序不能編譯,錯誤File format not recognized (無法識別文件格式)。然而使用Vs生成動態庫,再使用Qt去調用,程序就能夠正確編譯和運行。其中Qt默認使用MinGw編譯器。

那么是怎么回事呢?

靜態庫是編譯未鏈接的產物,當編譯可執行程序時會去鏈接靜態庫中的函數,由於使用了不同的編譯器編譯,因此會導致文件格式無法識別。

而動態庫是已被編譯和鏈接的資源,相比exe它只是沒有入口main,即已經是一個能被機器解讀的文件內容。在exe編譯過程中只是去查找了外部聲明,並沒要把動態庫的內容再次編譯進去,因此能夠編譯通過。在exe運行時會把庫內容拷貝到程序中,盡管動態庫和可執行文件是兩個不同的編譯器,但是它們最終都是被翻譯成了機器語言,因此程序可以調用庫中函數運行。

使用動態庫

在.pro文件中添加以下語句,指定動態庫的導入庫, 並在程序運行時把動態庫拷貝到程序所在路徑。

LIBS     += $$PWD/lib/myfun.lib

使用靜態庫

在.pro文件中直接指定靜態庫

LIBS     += $$PWD/lib/libmyfun.a


免責聲明!

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



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