visual studio創建和鏈接dll - 隱式鏈接

環境:visual studio 2019

本篇主要描述怎麼創建一個dll庫,然後用隱式鏈接的方式讓exe鏈接dll。

以下內容假設已經知道C艹的動態庫基本概念,和一些基本的C艹語法。

項目結構

demo項目有兩個部分,

· app

· mathlib

在這裏插入圖片描述

mathlib只提供一個簡單的方法power(),app直接調用這個方法返回一個數的平方。

main.cc

#include <iostream>
#include "Math.h"

using namespace std;

int main(int argc, char const *argv[])
{
    int a = 2;

    cout<< "power by <math>: " << power(a) << endl;
    return 0;
}

Math.h

#ifndef DEMO_MATH_LIB
#define DEMO_MATH_LIB

#ifdef __cplusplus
extern "C"{
#endif

_declspec(dllexport) int power(int a);

#ifdef __cplusplus
}
#endif

#endif //DEMO_MATH_LIB

Math.cpp

#include "Math.h"
#include <iostream>

using namespace std;

int power(int a)
{
    cout << "using custom power" << endl;
    return a * a;
}

Math.h中出現了很多宏定義,具體是什麼含義不是本篇的內容重點,會另起一篇來具體分析。這裏我們只從操作性角度來介紹,用人話來說這就是一篇操作手冊。

創建dll項目

visual studio 2019的項目是以solution來劃分的,我們這裏先創建一個dll的 sln。

創建新項目

在這裏插入圖片描述

填寫項目名

在這裏插入圖片描述

之後點創建就完了

刪除自帶的dllmain.cpp文件

一般創建的dll項目會自帶 dllmain.cpp,是默認用來做dll入口的。我們這裏不需要,把它刪掉就完了。同時刪掉的還有framework和pch

在這裏插入圖片描述

添加src和header

在這裏插入圖片描述
選擇現有項,
在這裏插入圖片描述

添加lib文件進去,然後稍微調下位置,頭文件放頭文件目錄下,不放也沒所謂。

在這裏插入圖片描述

修改預編譯頭

右鍵math_lib,屬性,進去C/C++的預編譯頭裏,關掉預編譯頭選項。否則你編譯會出現下面的錯誤,

在查找預編譯頭時遇到意外的文件結尾。是否忘記了向源中添加“#include “pch.h””?

在這裏插入圖片描述

生成

右鍵math_lib項目然後點生成,就可以產出dll文件了。
在這裏插入圖片描述
dll是在exe啓動的時候會去加載的動態鏈接庫。

lib也是我們需要的,它是靜態庫,在編譯exe的時候需要用來做靜態符號鏈接,但它不會編進exe裏。

創建exe項目

這次我們要創建控制檯應用
在這裏插入圖片描述

刪除自帶文件,添加我們的

下面的操作跟dll的操作差不多,添加完main.cc後差不多這個樣子
在這裏插入圖片描述

添加編譯依賴的頭文件和lib文件

添加前需要把Math.h複製到main.cc的同個目錄,然後添加到頭文件裏。不然編譯的時候會發生找不到符號錯誤。

添加完差不多這樣子
在這裏插入圖片描述

編譯生成

生成的結果,
在這裏插入圖片描述

現在我們有了exe了,但運行的話會直接調出進程。

在這裏插入圖片描述

因爲目錄下沒有dll文件。複製過來就行了。

在這裏插入圖片描述

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