h標頭檔案作用:宣告函式介面
dll動態鏈結庫作用:含有函式的可執行**
lib庫有兩種:
(1)靜態鏈結庫(static libary,以下簡稱「靜態庫」)
(2)動態連線庫(dll,以下簡稱「動態庫」)的導入庫(import libary,以下簡稱「導入庫」)
兩者的區別:
實質是不一樣的東西。
靜態庫本身就包含了實際執行**、符號表等等,而對於導入庫而言,其實際的執行**位於動態庫中,導入庫只包含了位址符號表等,確保程式找到對應函式的一些基本位址資訊。
如:當我們在自己的程式中引用了乙個h標頭檔案裡的函式,鏈結器怎麼知道該呼叫哪個dll檔案呢?
這就是導入庫檔案的作用:告訴鏈結器呼叫的函式在哪個dll中,函式執行**在dll中的什麼位置。這也就是為什麼需要在工程屬性的「附加依賴項」中填入.lib檔案,它起到橋梁的作用。
如果生成靜態庫檔案,則沒有dll ,只有lib,這時函式可執行**部分也在lib檔案中。
dll有兩種載入方式:
隱式鏈結和
顯式鏈結。
dll一般會有對應的導入庫,方便程式進行隱式鏈結載入,否則就需要自己loadlibary調入dll檔案,然後再getprocaddress獲得對應函式了(即顯示鏈結載入dll方式)。有了導入庫,你只需要鏈結導入庫後按照標頭檔案函式介面的宣告呼叫函式就可以了。
即:隱式鏈結方式需要導入庫,而顯式鏈結方式可以不需要。
.h標頭檔案是編譯時必須的,lib庫是鏈結時需要的,dll動態鏈結庫是執行時需要的。
若生成了dll,則肯定也生成 lib檔案。如果要完成源**的編譯和鏈結,有標頭檔案和lib就夠了。如果也使動態連線的程式執行起來,有dll就夠了。在開發和除錯階段,當然最好都有。
注:關於動態鏈結庫的學習:
關於找不到庫檔案
系統 centos 6.3 有時我們執行某個程式時出現缺少庫檔案的報錯,如下 error while loading shared libraries libcrypto.so.10 cannot open shared object file no such file or directory 遇...
Qt關於匯入ffmpeg庫檔案
注 之前看了網上一些相關的配置文章,對於windows7 64bit 下是選用64bit還是32bit的ffmpeg有著一些區別,有在64bit下使用64bit出現一些解決不了的錯誤,但使用32bit則不存在問題。我電腦64bit,選擇32bit的ffmpeg.2.解壓ffmpeg include和...
關於python檔案 關於python檔案操作
總是記不住api。昨晚寫的時候用到了這些,但是沒記住,於是就索性整理一下吧 python中對檔案 資料夾 檔案操作函式 的操作需要涉及到os模組和shutil模組。得到當前工作目錄,即當前python指令碼工作的目錄路徑 os.getcwd 返回指定目錄下的所有檔案和目錄名 os.listdir 函...