靜態庫和動態庫的區別
在鏈接階段如何處理,直接鏈接到可執行程序的是靜態庫,否則就是動態庫
靜態庫
靜態庫是會被打包到exe可執行程序中的庫,採用靜態庫一般生成的執行程序文件會比較大,
但是不需要額外拷貝dll文件了。
vs2019 創建c++ 靜態庫
如圖創建頭文件 Multi.h , 和 cpp文件 Multi.cpp
Multi.h代碼如下
#pragma once
int MultiThree(int a, int b);
Multi.cpp代碼如下
#include "pch.h"
#include "Multi.h"
#include "framework.h"
// TODO: This is an example of a library function
int MultiThree(int a, int b)
{
return a * b;
}
然後編譯生成靜態庫
vs2019 使用靜態庫
創建一個控制檯程序 這裏就不展示如何創建了,然後右鍵 屬性,配置如下
在 main函數中使用靜態庫方法
動態庫
動態庫是在運行的時候加載的,沒有必要打包到主程序,可以單獨以dll文件的形式存在,可以多個應用程序共用一個動態庫,方便更新dll,應用程序不需要重複打包
創建動態庫
如圖還是新建Multi.h 和 Multi.cpp文件
Multi.h
#ifndef MULTI
#define MULTI
// add headers that you want to pre-compile here
#include "framework.h"
extern "C" _declspec(dllexport) int myMulti(int a, int b);
extern "C" _declspec(dllexport) int myMultiThree(int a, int b);
#endif
Multi.cpp
#include "pch.h"
#include "Multi.h" // 這裏放了你函數的聲明
// 當使用預編譯的頭時,需要使用此源文件,編譯才能成功。
#include<iostream>
using namespace std;
int myMulti(int a, int b)
{
return a * b;
}
int myMultiThree(int a, int b)
{
return a * b;
}
同上設置dll文件生成目錄,然後build
隱式使用動態庫
新建c++控制檯程序,設置屬性如下
控制檯配置如下