1. 程式人生 > >15 靜態連線庫和動態連結庫

15 靜態連線庫和動態連結庫

靜態連結庫就是一種軟體模組化開發的一種解決方案;
VS2013靜態庫的製作簡單示例:
建立Win32專案,然後選擇靜態庫,新增如下兩個簡單檔案,編譯生成靜態庫就可以使用了;

/*
 *add.h
 */
#ifndef ADD_H
#define ADD_H
int add(int x, int y);
#endif
/*
*add.c
*/
#include "add.h"

int add(int x, int y)
{
	return x + y;
}

靜態庫的使用:
將標頭檔案和生成的靜態庫放入test.c同級目錄下;然後如參照以下程式碼一樣使用,也可以將其放入VS中標頭檔案、庫等路徑下就能像標準庫一樣使用了;

/*
 *test.c
 */
#include <windows.h>
#include "add.h"
//加上使用的靜態庫
#pragma comment (lib, "add.lib")

int WINAPI WinMain(HINSTANCE hInstance,					//入口函式,WINAPI即是__stdcall(函式呼叫約定的一種)
	HINSTANCE hPrevInstance,
	PSTR szCmdLine,
	int iCmdShow)
{
	int x = add(3, 5);
	return 0;
}

靜態庫的缺點:
1.使用靜態庫生成的可執行檔案體積比較大;
2.包含相同的公共程式碼,造成浪費;

動態連結庫:即Dynamic Link Library,縮寫.DLL;是微軟在Windows作業系統上實現共享函式庫概念的一種方式,其副檔名有.dll、 .ocx;
例項如下:

/*
 *add.h
 */
#ifndef ADD_H
#define ADD_H
_declspec(dllexport)  int add(int x, int y); 
#endif
/*
 *add.c
 */
#ifndef ADD_H
#define ADD_H
_declspec(dllexport)  int add(int x, int y);
#endif
#include "add.h"

_declspec(dllexport)  int add(int x, int y)
{
	return x + y;
}
/*
 *test.c
 */
#include <windows.h>
#include "add.h"
//加上使用的靜態庫(這裡的靜態庫只包含一些輔助資訊,和上面靜態庫不一樣)
#pragma comment (lib, "add.lib")

int WINAPI WinMain(HINSTANCE hInstance,					//入口函式,WINAPI即是__stdcall(函式呼叫約定的一種)
	HINSTANCE hPrevInstance,
	PSTR szCmdLine,
	int iCmdShow)
{
	int x = add(3, 5);
	return 0;
}

和靜態庫使用一樣,只是最後將.dll放入可執行程式路徑下;