vc引入lib庫


鏈接庫分為靜態鏈接庫和動態鏈接庫,靜態鏈接庫只有一個.lib文件,而動態鏈接庫則有一個.lib文件和.dll文件;靜態鏈接庫的.lib文件里面有函數真正實現的機器碼,而動態鏈接庫的.lib只有函數的符號名,真正的函數的實現在dll文件中。

當你使用靜態庫或者使用隱式的方式加載動態連接庫的話,都需要將.lib文件加到vc工程里面去,他們的區別就在於,使用動態庫的話,在運行程序時,需要額外將函數真正實現的dll文件放到程序的運行目錄下或者程序默認的搜索路徑下,而靜態庫則只要引入.lib文件后,就可以調用庫中的函數。

在vc環境下將lib庫引入工程,有下面3種方法:

第一種方法,lib文件直接加入到工程文件列表中。

在VC中打開“File View”一頁,選中工程名,單擊鼠標右鍵,然后在彈出的快捷菜單中選擇【Add Files to Project】命令,在彈出的文件對話框中選中要加入dll的lib文件即可。


第二種方法,設置工程的【Project】菜單【Settings】來加載dll的lib文件

打開工程的【Project】菜單的【Settings】,選中【Link】,然后在“Object/library modules”下的文本框中輸入dll的lib文件。

第三種方法,預編譯指令導入

加入預編譯指令#pragma comment(lib,”*.lib”),這種方法優點是可以利用條件預編譯指令鏈接不同版本的lib文件。因為,在Debug方式下,產生的lib文件是Debug版本,如Regd.lib;在Release方式下,產生的lib文件時Release版本,如Regr.lib。

當然,在引入.lib文件后,工作並沒有完成,為了解決編譯問題,我們還需要將連接庫中函數的對應的頭文件(*.h)包含到其中,在這個頭文件中給出了鏈接庫中定義的函數原型。在編譯完成后,連接器會去.lib文件中去查找函數的符號表,找到后,編譯和連接工作就完成了;在運行的時候,再去dll文件中去找函數的真正實現(如果是靜態庫則直接在.lib文件中尋找函數的真正實現。)

 

ps:補充一句,關於加載動態鏈接庫的兩種方式隱式加載和顯示加載,隱式加載就如上面所介紹的引入.lib文件,包含鏈接庫的頭文件,拷貝dll文件到運行目錄下后就實現了隱式加載;而顯示加載則是使用LoadLibrary和FreeLibrary來加載和卸載動態鏈接庫,使用GetProcAddress函數來獲取函數指針,然后通過函數指針來調用鏈接庫中的函數。

 


免責聲明!

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



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