最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++封裝靜態(tài)鏈接庫(kù)和使用的詳細(xì)步驟

 更新時(shí)間:2022年08月09日 09:05:19   作者:霧里塵埃  
這篇文章主要介紹了C++封裝靜態(tài)鏈接庫(kù)和使用,本文描述了怎么去把一個(gè)C++程序封裝成一個(gè)靜態(tài)庫(kù)并且如何去使用這些靜態(tài)庫(kù),需要的朋友可以參考下

零碎記事

  距離上次發(fā)博客已經(jīng)有一年半了,轉(zhuǎn)眼間我也是從做圖像研究到了做游戲開(kāi)發(fā),說(shuō)起來(lái)看看前面的博文,本來(lái)就有前兆的東西呢(笑)......因?yàn)橹饕€是在使用虛幻引擎,所以C++的東西會(huì)碰到多一些。

  以后程序技術(shù)方面的文章就放博客,游戲設(shè)計(jì)相關(guān)的雜談就放知乎那邊吧,博主的知乎可以通過(guò)友鏈過(guò)去。

  B站那邊的賬號(hào)也打算開(kāi)始復(fù)活,后面是更新游戲設(shè)計(jì)雜談?lì)惖囊曨l還是更新虛幻技術(shù)方面的視頻還在猶豫不決......

為什么要把程序封裝成庫(kù)

  有時(shí)我們需要把自己的程序交給第三方調(diào)用,但是又不想被別人看到自己的具體實(shí)現(xiàn)代碼,就封裝成庫(kù)給別人使用。庫(kù)有動(dòng)態(tài)鏈接庫(kù)和靜態(tài)鏈接庫(kù),區(qū)別是動(dòng)態(tài)鏈接庫(kù)可以在程序運(yùn)行時(shí)動(dòng)態(tài)鏈接,而靜態(tài)鏈接庫(kù)相當(dāng)于.cpp文件,在編譯時(shí)的鏈接階段就鏈接進(jìn)去了。

博主的環(huán)境

  系統(tǒng):Window 10

  IDE:VS2022

  如果在使用的是其他IDE的,看完這個(gè)其實(shí)自己應(yīng)該也能知道用其他IDE該怎么操作,其實(shí)就是一個(gè)對(duì)編譯和鏈接過(guò)程的理解深度的問(wèn)題,懂了在哪里都能自己封裝和使用庫(kù)的。

  這邊的演示有中文路徑,VS對(duì)中文路徑支持得確實(shí)還挺可以的,不會(huì)報(bào)錯(cuò)。不過(guò)建議大家還是盡量別這樣了,就怕萬(wàn)一你那邊對(duì)中文路徑支持不好,編譯出問(wèn)題。

封裝步驟

準(zhǔn)備好待封裝的程序

  我準(zhǔn)備了一個(gè)Point類,就當(dāng)做是要給別人用的,現(xiàn)在我就把這個(gè)類封裝成靜態(tài)庫(kù)。

//Point.h
#pragma once
#include <utility>

typedef std::pair<int, int> Coordinate;
class Point
{
private:
    Coordinate location;
public:
    Point();
    Point(int x, int y);
    Coordinate GetLocation();
    int GetX() const;
    int GetY() const;
    virtual Point operator + (const Point& B) const;
    virtual Point operator - (const Point& B) const;
};
//Point.cpp
#include "Point.h"
Point::Point() :
    location(Coordinate(0, 0))
{
}
Point::Point(int x, int y):
    location(Coordinate(x, y))
{
}
Coordinate Point::GetLocation()
{
    return location;
}
int Point::GetX() const
{
    return location.first;
}
int Point::GetY() const
{
    return location.second;
}
Point Point::operator+(const Point& B) const
{
    return Point(GetX()+B.GetX(), GetY()+B.GetY());
}
Point Point::operator-(const Point& B) const
{
    return Point();
}

開(kāi)始封裝

配置項(xiàng)目

  平常我們是編譯成可執(zhí)行文件(即.exe),現(xiàn)在我們?cè)O(shè)置一下,改成編譯成靜態(tài)庫(kù)(即.lib)。

  這個(gè)設(shè)置在VS2022里是這樣的:

  右擊項(xiàng)目->屬性->配置屬性->常規(guī)->配置類型->改為靜態(tài)庫(kù)

  這樣我們編譯出來(lái)的東西就不是.exe文件,而是.lib文件了,也就是靜態(tài)鏈接庫(kù)。

編譯

  這邊在VS2022里,編譯就是生成。

  就跟編譯普通程序一樣,編譯成功。

找到編譯好的靜態(tài)庫(kù)

  自己翻翻項(xiàng)目下面的文件夾,能找到編譯出來(lái)的靜態(tài)庫(kù)的。

  我這邊是 項(xiàng)目根目錄/x64/Debug/項(xiàng)目名.lib,就是下圖里的那個(gè)Point.lib,這就是靜態(tài)庫(kù)。

打包

  其實(shí)就是把頭文件跟靜態(tài)庫(kù)一起給別人就行了,靜態(tài)庫(kù)的作用跟.cpp文件差不多,使用時(shí)就是包含頭文件,然后鏈接到靜態(tài)庫(kù)把實(shí)現(xiàn)關(guān)聯(lián)起來(lái)即可。

使用靜態(tài)庫(kù)使用步驟包含頭文件

  新建了個(gè)項(xiàng)目,這個(gè)項(xiàng)目要用到我的那個(gè)Point類,為了方便包含頭文件,我把上邊的那個(gè)有Point.h有和Point.lib的文件夾挪到新項(xiàng)目文件夾下了。

  新建了個(gè)程序,要用到我寫的那個(gè)Point類,那就先包含Point.h,里面有關(guān)于Point類的聲明。

//使用靜態(tài)庫(kù).cpp
#include <iostream>
#include "大摸魚(yú)師千里的Point類/Point.h"
using namespace std;

int main()
{
    Point a(1, 2);
    Point b(3, 4);
    Point c = a + b;
    cout << c.GetX() << ", " << c.GetY() << endl;

    return 0;
}

  但是這個(gè)時(shí)候編譯還是通不過(guò)的,如下圖報(bào)了“無(wú)法解析外部符號(hào)”,是鏈接的錯(cuò)誤來(lái)的。頭文件雖然有Point類聲明信息,但沒(méi)有實(shí)現(xiàn)的信息,實(shí)現(xiàn)的信息在靜態(tài)庫(kù)里,但是現(xiàn)在鏈接器還找不到靜態(tài)庫(kù),所以報(bào)錯(cuò)了。

添加鏈接路徑

  有兩種方法,一種是在源文件里設(shè)置,另一種是在項(xiàng)目里設(shè)置。

源文件設(shè)置

  先講在源文件里設(shè)置,其實(shí)就是加個(gè)編譯頭告訴鏈接器靜態(tài)庫(kù)的路徑而已,語(yǔ)法如下:

#pragma comment(lib, 你的靜態(tài)庫(kù)路徑)

  這樣子鏈接器在搜索默認(rèn)的庫(kù)文件路徑外,還會(huì)搜你這里的設(shè)的靜態(tài)庫(kù)路徑。

  在我這里,加了就是會(huì)變成這樣:

//使用靜態(tài)庫(kù).cpp
#include <iostream>
#include "大摸魚(yú)師千里的Point類/Point.h"
using namespace std;

#pragma comment(lib, "大摸魚(yú)師千里的Point類/Point.lib")

int main()
{
    Point a(1, 2);
    Point b(3, 4);
    Point c = a + b;
    cout << c.GetX() << ", " << c.GetY() << endl;

    return 0;
}

  因?yàn)殒溄悠髡业铰窂搅?,編譯就能過(guò)了,程序正常運(yùn)行,效果如下。

項(xiàng)目設(shè)置

  VS2022里是這么設(shè)置鏈接器搜索的庫(kù)目錄的

  先是設(shè)置庫(kù)的目錄,項(xiàng)目屬性->VC++目錄->庫(kù)目錄->編輯->新行->把靜態(tài)庫(kù)所在目錄添加進(jìn)去

  因?yàn)檫@個(gè)時(shí)候只是加了搜索的庫(kù)目錄,但是還沒(méi)有具體到哪個(gè)庫(kù),可以像上邊那樣用編譯頭來(lái)指定,就是不加相對(duì)路徑直接指定靜態(tài)庫(kù),就像這樣。

#pragma comment(lib, "Point.lib")

  現(xiàn)在講怎么在項(xiàng)目里配置具體到指定庫(kù)。

  項(xiàng)目屬性->鏈接器->輸入->附加依賴項(xiàng)->編輯->添加你的庫(kù)

  設(shè)完就是不加編譯頭也能編譯運(yùn)行程序了,這是效果

以上就是C++封裝庫(kù)和使用的全部?jī)?nèi)容了,覺(jué)得有學(xué)到的話可以點(diǎn)個(gè)贊嘿嘿。

到此這篇關(guān)于C++封裝靜態(tài)鏈接庫(kù)和使用的文章就介紹到這了,更多相關(guān)C++靜態(tài)鏈接庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++實(shí)現(xiàn)中綴轉(zhuǎn)后綴的示例詳解

    C++實(shí)現(xiàn)中綴轉(zhuǎn)后綴的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用C++實(shí)現(xiàn)中綴轉(zhuǎn)后綴的問(wèn)題,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • C++中strstr函數(shù)的實(shí)現(xiàn)方法總結(jié)

    C++中strstr函數(shù)的實(shí)現(xiàn)方法總結(jié)

    這篇文章主要介紹了C++中strstr函數(shù)的實(shí)現(xiàn)方法總結(jié)的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • C++基于棧的深搜算法實(shí)現(xiàn)馬踏棋盤

    C++基于棧的深搜算法實(shí)現(xiàn)馬踏棋盤

    這篇文章主要為大家詳細(xì)介紹了C++基于棧的深搜算法實(shí)現(xiàn)馬踏棋盤,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C++寫注冊(cè)表項(xiàng)實(shí)例

    C++寫注冊(cè)表項(xiàng)實(shí)例

    這篇文章主要介紹了C++寫注冊(cè)表項(xiàng)實(shí)例,可實(shí)現(xiàn)開(kāi)機(jī)啟動(dòng)的功能,是進(jìn)行Windows桌面應(yīng)用程序開(kāi)發(fā)中非常重要的技巧,需要的朋友可以參考下
    2014-10-10
  • C++基礎(chǔ) class、struct、union詳細(xì)

    C++基礎(chǔ) class、struct、union詳細(xì)

    這篇文章主要 給大家介紹的是C++基礎(chǔ) class、struct、union,主要由三部分組成,分別是、類class、結(jié)構(gòu)體struct、共用體union,需要的朋友可以參考一下
    2021-09-09
  • 匯編語(yǔ)言rep movsd 的使用詳解

    匯編語(yǔ)言rep movsd 的使用詳解

    rep movsd 每次ecx!=0便執(zhí)行movsd ,然后ecx=ecx-1 movsd移動(dòng)ds:[si] 到es:[di],在32位匯編下可以用esi代替si,edi代替di
    2013-09-09
  • C++中的類型查詢之探索typeid和type_info(推薦)

    C++中的類型查詢之探索typeid和type_info(推薦)

    C++ 是一種靜態(tài)類型語(yǔ)言,這意味著每個(gè)變量的類型在編譯時(shí)就已經(jīng)確定,在這篇技術(shù)分享中,我們將探討 C++ 中的 typeid 和 type_info,以及如何使用它們來(lái)獲取類型信息,需要的朋友可以參考下
    2024-05-05
  • C++實(shí)現(xiàn)簡(jiǎn)單酒店管理系統(tǒng)

    C++實(shí)現(xiàn)簡(jiǎn)單酒店管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡(jiǎn)單酒店管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • OpenCV實(shí)現(xiàn)彩色照片轉(zhuǎn)換成素描卡通片

    OpenCV實(shí)現(xiàn)彩色照片轉(zhuǎn)換成素描卡通片

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)彩色照片轉(zhuǎn)換成素描卡通片,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C語(yǔ)言代碼實(shí)現(xiàn)猜數(shù)字

    C語(yǔ)言代碼實(shí)現(xiàn)猜數(shù)字

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言代碼實(shí)現(xiàn)猜數(shù)字,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11

最新評(píng)論

万宁市| 丹凤县| 温泉县| 紫金县| 巴东县| 应用必备| 泽州县| 大埔县| 文登市| 台安县| 旅游| 招远市| 咸阳市| 金寨县| 高雄县| 伊川县| 萨迦县| 石城县| 安义县| 双柏县| 辽源市| 黑河市| 泽州县| 新干县| 山东省| 张家川| 巩留县| 新乡县| 海安县| 怀化市| 胶南市| 会昌县| 永州市| 桐庐县| 孝感市| 岐山县| 延庆县| 刚察县| 始兴县| 红河县| 富蕴县|