VS下生成與配置靜態庫與動態庫(一)
此處僅以VS2010為例,詳細說明一下如何在VS環境下生成和使用C++的靜態庫與動態庫。Qt下生成和使用靜態和動態庫後續再講。
本文僅供初學者參考,如果有問題歡迎大家指正。
首先簡單地理解一下靜態庫與動態庫,以及兩者的區別。
靜態庫(*.lib): 將*.cpp檔案中的函式的地址和定義,以及函式之間的連結關係通通打包,生成的一個二進位制檔案;
動態庫(*.lib+*.dll): 動態庫的*.lib檔案,打包的只是*.cpp檔案中函式的地址和連結,函式的具體定義打包在*.dll檔案中。
聯絡:
1.二者都不包含函式的宣告部分,因此呼叫這兩種庫的時候,都需要包含相應的標頭檔案(*.h);
2.靜態庫和動態庫的*.lib檔案,在生成可執行檔案(*.exe)的時候,都將被打包進*.exe檔案中;
區別:
1.靜態庫的*.lib檔案遠大於動態庫的*.lib檔案;
2.動態庫的*.dll檔案作為可執行檔案*.exe的附加檔案加入到程式中,一般放在*.exe的同級目錄下。
簡單地介紹完這兩種庫,下面來看看在VS下是怎麼生成和使用的。
靜態庫:
生成:
1.新建一個空的Visual Studio 2010 ,Visual C++, Win32 控制檯工程,取名為“testlib”;
(你可以在嚮導中選擇靜態庫選項,也可以在後續的設定中設定生成靜態庫,這裡我們在後面進行設定);
2.構造一個類用於測試,這裡叫做“CAdd”類,進行的是整數的加法運算,宣告和實現分別儲存在檔案“add.h”和
“add.cpp”中:
“add.h”:
#ifndef ADD_H
#define ADD_H
class CAdd
{
public:
CAdd();
~CAdd();
int add(int a, int b);
};
#endif
"add.cpp":
#include "add.h"
CAdd::CAdd()
{
}
CAdd::~CAdd()
{
}
int CAdd::add(int a, int b)
{
return a+b;
}
可以在“屬性”->"C++"->"預編譯頭"下選擇“不使用預編譯頭”去掉cpp檔案的“stdafix.h”的新增要求
3. 選擇編譯為靜態庫:
在“屬性”->“配置屬性"->”常規“->”配置型別“下選擇”靜態庫(.lib)“(預設是"應用程式(.exe)"),在此介面上可以更改輸出檔案(.lib)所在的目錄,
以及lib檔案的名稱(預設是工程的名稱):
4.選擇生成解決方案,這時在你剛剛選擇的輸出資料夾下(這裡是lib資料夾),已經生成了靜態庫檔案,add.lib
使用:
使用很簡單:
1.屬性-》配置屬性-》C/C++->常規-》附加包含目錄,填寫”add.h“所在目錄;
2.屬性-》配置屬性-》連結器-》附加依賴項,填寫”add.lib“;
3.屬性-》配置屬性-》連結器-》附件依賴目錄,填寫”add.lib“所在目錄;
4.在用到CAdd這個類的地方新增標頭檔案包含#include<add.h>
5.具體呼叫CAdd類的函式
下一篇將介紹如何在Visual Studio下生成和使用動態連結庫
相關文章
- linux下的靜態庫與動態庫Linux
- 靜態庫與動態庫
- cmake:生成靜態庫和動態庫
- 動態連結庫與靜態連結庫
- Android:JNI與NDK(二)交叉編譯與動態庫,靜態庫Android編譯
- 靜態庫生成
- iOS 靜態庫 與私有庫iOS
- android下java的靜態庫和動態庫AndroidJava
- 簡述Linux下的靜態庫和動態庫Linux
- ios靜態庫和動態庫iOS
- 動靜態庫
- 一、靜態庫和動態庫,Makefile專案管理專案管理
- C靜態庫的建立與使用--為什麼要引入靜態庫?
- Linux共享庫、靜態庫、動態庫詳解Linux
- 封裝動態庫dll與靜態庫lib(原理及簡單例項)封裝單例
- Linux 靜態庫生成及呼叫Linux
- [Linux]動靜態庫Linux
- linux 動態庫 靜態庫 函式覆蓋Linux函式
- iOS動態庫和靜態庫的運用iOS
- iOS 靜態庫詳解與開發iOS
- 靜態路由原理與配置路由
- freemarker根據靜態模板和動態模板生成PDF與Word
- 筆記: 判斷lib庫是動態庫還是靜態庫筆記
- Android NDK祕籍--淺析靜態庫和動態庫Android
- iOS中的動態庫,靜態庫和framework介紹iOSFramework
- linux下靜態連結庫和動態連結庫的區別有哪些Linux
- 靜態域與靜態方法
- Android NDK祕籍--編譯靜態庫、呼叫靜態庫Android編譯
- 【連結 1】與靜態連結庫連結
- echarts之靜態與動態地圖Echarts地圖
- AOP之靜態代理VS動態代理
- Envoy實現.NET架構的閘道器(一)靜態配置與檔案動態配置架構
- 資料庫與動態規劃資料庫動態規劃
- 跨模組介面與動態庫
- 理解靜態繫結與動態繫結
- 靜態代理、動態代理與Mybatis的理解MyBatis
- JavaScript 靜態屬性與靜態方法JavaScript
- net 靜態方法與非靜態方法
- Vuex 單狀態庫 與 多模組狀態庫Vue