15 靜態連線庫和動態連結庫
阿新 • • 發佈:2019-01-01
靜態連結庫就是一種軟體模組化開發的一種解決方案;
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放入可執行程式路徑下;