1. 程式人生 > 實用技巧 >Qt呼叫靜態庫

Qt呼叫靜態庫

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

使用Qt生成一個靜態庫,並使用Qt程式去呼叫,程式正常編譯執行。但使用VS生成靜態庫,再使用Qt程式去呼叫,程式不能編譯,錯誤File format not recognized (無法識別檔案格式)。然而使用Vs生成動態庫,再使用Qt去呼叫,程式就能夠正確編譯和執行。其中Qt預設使用MinGw編譯器。

那麼是怎麼回事呢?我猜...

靜態庫是編譯未連結的產物,當編譯可執行程式時會去連線靜態庫中的函式,由於使用了不同的編譯器編譯,因此會導致檔案格式無法識別。

而動態庫是已被編譯和連結的資源,相比exe它只是沒有入口main,即已經是一個能被機器解讀的檔案內容。在exe編譯過程中只是去查找了外部宣告,並沒要把動態庫的內容再次編譯進去,因此能夠編譯通過,並在執行需要時做一份內容拷貝,儘管動態庫和可執行檔案是兩個不同的編譯器,但是它們最終都是被翻譯成了機器語言。