C++ 靜態庫和動態庫的創建與使用

靜態庫和動態庫的區別

在鏈接階段如何處理,直接鏈接到可執行程序的是靜態庫,否則就是動態庫

靜態庫

靜態庫是會被打包到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++控制檯程序,設置屬性如下




控制檯配置如下


顯示調用動態庫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章