亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++ 項目引入lib和dll的區(qū)別與使用實戰(zhàn)

 更新時間:2024年02月04日 10:33:06   作者:wangnaisheng  
靜態(tài)鏈接庫與動態(tài)鏈接庫都是共享代碼的方式,本文主要介紹了C++項目引入lib和dll的區(qū)別與使用實戰(zhàn),具有一定的參考價值,感興趣的可以了解一下

一、介紹

1.1、lib 文件(靜態(tài)庫):

編譯時使用:當項目鏈接靜態(tài)庫(.lib 文件)時,編譯器會將庫中的代碼直接嵌入到最終生成的可執(zhí)行文件中。

其特點:程序體積較大:因為包含了所有被調(diào)用函數(shù)的完整實現(xiàn),不依賴外部動態(tài)庫就能獨立運行。
不需要運行時尋找:發(fā)布程序時無需攜帶額外的庫文件,用戶不需要安裝或放置任何額外的庫就可以運行程序。
版本更新麻煩:如果靜態(tài)庫有更新,需要重新編譯鏈接整個應(yīng)用程序才能應(yīng)用新版本的庫。

1.2、dll 文件(動態(tài)鏈接庫):

運行時加載:應(yīng)用程序在運行時通過鏈接器的導入表找到對應(yīng)的.dll 文件并加載其函數(shù)地址到進程空間中執(zhí)行。

其特點:程序體積較?。褐话{(diào)用函數(shù)的引用信息,實際函數(shù)體在dll中,減少了內(nèi)存占用和磁盤空間。
運行時依賴:發(fā)布程序時必須同時提供相應(yīng)的dll文件,否則用戶在沒有這些dll的情況下無法運行程序。
動態(tài)加載與更新靈活:可以實現(xiàn)熱更新功能,只需要替換dll文件即可更新相應(yīng)模塊的功能,而無需重新編譯整個應(yīng)用程序。

二、區(qū)別及聯(lián)系

2.1、編譯和鏈接:

lib 是靜態(tài)庫,在編譯時將庫的代碼直接嵌入到可執(zhí)行文件中。這意味著當你使用靜態(tài)庫時,你的可執(zhí)行文件會包含庫的所有代碼,因此在運行時不需要額外的庫文件。
dll 是動態(tài)鏈接庫,它是一個獨立的文件,在運行時被動態(tài)地加載到進程中。使用動態(tài)鏈接庫時,你的可執(zhí)行文件只包含對庫的引用,在運行時系統(tǒng)會根據(jù)需要加載并鏈接庫。

2.2、可維護性和更新:

使用靜態(tài)庫,如果庫有更新,你需要重新編譯和鏈接你的項目。
使用動態(tài)鏈接庫,如果庫有更新,你只需要替換.dll 文件,而不需要重新編譯你的項目。

2.3、內(nèi)存占用和性能:

靜態(tài)庫會將庫的代碼全部包含在可執(zhí)行文件中,因此會增加可執(zhí)行文件的大小。
使用動態(tài)鏈接庫,只有在程序?qū)嶋H使用庫中的函數(shù)時,才會將相關(guān)代碼加載到內(nèi)存中。這可以減少程序的內(nèi)存占用。

2.4、跨平臺考慮:

靜態(tài)鏈接庫通常是平臺特定的,因為它們直接嵌入到可執(zhí)行文件中。
動態(tài)鏈接庫可能是跨平臺的,因為它們獨立于可執(zhí)行文件運行,但仍然需要考慮不同平臺之間的差異和兼容性問題。

2.5、需要注意的事項:

路徑問題:確保動態(tài)鏈接時,運行環(huán)境能找到必要的dll文件。這可能需要將dll放在系統(tǒng)的PATH環(huán)境變量包含的目錄下,或者與exe文件位于同一目錄下。
版本兼容性:不同版本的dll可能會有不同的API接口或行為,因此要保證程序使用的dll版本與開發(fā)時鏈接的lib或dll頭文件相匹配,避免因版本不一致導致的運行錯誤。
部署與維護:動態(tài)鏈接庫通常要求在分發(fā)軟件時一并提供所有依賴的dll,而且需注意的是,某些dll可能還會有它們自己的依賴鏈,需要一同處理。
安全性和穩(wěn)定性:靜態(tài)鏈接可以減少由于缺少dll或dll版本不正確帶來的運行時故障風險,但可能導致程序包更大;動態(tài)鏈接則更利于資源管理和更新,但若管理不當,則會增加部署和運行時出錯的可能性。

總的來說,選擇使用 lib 還是 dll 取決于項目需求、可維護性要求以及性能考慮。

三、實戰(zhàn)

簡單的接口:

max.h:

#ifndef MAX_H_
#define MAX_H_
#ifdef _cplusplus
extern "C"
{
#endif
    int max(int a, int b);
#ifdef cplusplus
}
/* code */
#endif //_cplusplus

#endif //MAX_H_

max.cpp

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

int max(int a, int b)
{
    return a > b ? a : b;
}

然后在此處寫CMakeLists.txt

SET(LIBMAX_SRC max.cpp)
ADD_LIBRARY(max SHARED ${LIBMAX_SRC})

然后cmake .

make就能得到.so

然后編寫main.cpp 也就是調(diào)用接口的。

#include <iostream>
#include "max.h"
int main(int argc, char const *argv[])
{
    std::cout<<"max: "<<max(2,3)<<std::endl;
    return 0;
}

然后再編寫一個CMAKE

# 設(shè)置cmake的最小版本
cmake_minimum_required(VERSION 2.8.8)
# 項目名稱
project(main)
# 設(shè)置C++編譯器,設(shè)置變量路徑
set(CMAKE_CXX_STANDARD 11)
# 項目中的include路徑
include_directories(lib)
# 項目中的lib路徑
link_directories(lib)
add_executable(main main.cpp)
#鏈接libmax.so
target_link_libraries(main max)

然后編譯:

cmake ..

make

就能得到結(jié)果

到此這篇關(guān)于C++ 項目引入lib和dll的區(qū)別與使用實戰(zhàn)的文章就介紹到這了,更多相關(guān)C++ lib和dll內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 用C++實現(xiàn)單向循環(huán)鏈表的解決方法

    用C++實現(xiàn)單向循環(huán)鏈表的解決方法

    本篇文章是對用C++實現(xiàn)單向循環(huán)鏈表的解決方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C 語言常用方法技巧

    C 語言常用方法技巧

    本文主要介紹了C語言常用方法技巧。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-03-03
  • C語言二叉樹與堆的概念與實現(xiàn)

    C語言二叉樹與堆的概念與實現(xiàn)

    這篇文章主要給大家介紹了關(guān)于C語言二叉樹與堆的相關(guān)資料,文章詳細記錄了他們的相關(guān)概念以及如何實現(xiàn)的,通過圖文介紹的非常詳細,需要的朋友可以參考下
    2021-06-06
  • C++ 中const對象與const成員函數(shù)的實例詳解

    C++ 中const對象與const成員函數(shù)的實例詳解

    這篇文章主要介紹了C++ 中const對象與const成員函數(shù)的實例詳解的相關(guān)資料,希望通過本文能讓大家徹底掌握該如何使用,需要的朋友可以參考下
    2017-08-08
  • c語言處理函數(shù)調(diào)用的方法

    c語言處理函數(shù)調(diào)用的方法

    函數(shù)就是一段封裝好的,可以重復使用的代碼,它使得我們的程序更加模塊化,不需要編寫大量重復的代碼。這篇文章主要介紹了c語言是如何處理函數(shù)調(diào)用的?需要的朋友可以參考下
    2021-11-11
  • 從C語言過渡到C++之基本變化

    從C語言過渡到C++之基本變化

    在之前的C++代碼訓練營系列中,我試圖用完成具體項目的方式給大家介紹C++,但后來大家反饋說這樣從C過渡到C++有點跟不上。于是我又專門設(shè)計了這個《從C到C++》的過渡專題,我準備通過10篇文章介紹一下C++和C的重要區(qū)別。
    2017-07-07
  • C++如何調(diào)用簡單的python程序

    C++如何調(diào)用簡單的python程序

    這篇文章主要介紹了C++如何調(diào)用簡單的python程序問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C語言實現(xiàn)BF算法案例詳解

    C語言實現(xiàn)BF算法案例詳解

    這篇文章主要介紹了C語言實現(xiàn)BF算法案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 深入分析C中不安全的sprintf與strcpy

    深入分析C中不安全的sprintf與strcpy

    本篇文章是對C中不安全的sprintf與strcpy函數(shù)的使用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言遞歸思想實現(xiàn)漢諾塔詳解

    C語言遞歸思想實現(xiàn)漢諾塔詳解

    大家好,本篇文章主要講的是C語言遞歸思想實現(xiàn)漢諾塔詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01

最新評論