国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

靜態(tài)鏈接庫和動(dòng)態(tài)鏈接庫的區(qū)別

這篇具有很好參考價(jià)值的文章主要介紹了靜態(tài)鏈接庫和動(dòng)態(tài)鏈接庫的區(qū)別。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

靜態(tài)鏈接庫

  • 在編譯時(shí)將庫的代碼(.lib文件)和應(yīng)用程序的代碼合并在一起,生成一個(gè)單獨(dú)的可執(zhí)行文件。
  • 發(fā)布時(shí)非常方便,直接一個(gè).exe文件即可

動(dòng)態(tài)鏈接庫(共享庫)

  • 庫的代碼在編譯時(shí)和鏈接時(shí)與應(yīng)用程序分開。應(yīng)用程序包含對庫的引用(.lib文件,在這里被稱為導(dǎo)入庫),但不包含庫的實(shí)際代碼。
  • 運(yùn)行時(shí),操作系統(tǒng)加載共享庫(dll),并將其與應(yīng)用程序連接。

在對你的項(xiàng)目進(jìn)行依賴設(shè)置時(shí)就會發(fā)現(xiàn),鏈接靜態(tài)庫和動(dòng)態(tài)庫的步驟是基本一致的,比如用Premake工具維護(hù)的項(xiàng)目中,在premake.lua文件中,通過links{myStaticLibrary, mySharedLibrary }來鏈接庫;比如Cmake維護(hù)的項(xiàng)目中,通過target_link_libraries(MyProject PRIVATE LibraryName)來鏈接庫,并沒有區(qū)分是靜態(tài)還是動(dòng)態(tài),編譯器一般會自己判斷。額外的,如果是動(dòng)態(tài)庫,還需要把.dll文件放在可執(zhí)行文件的目錄下。

鏈接一個(gè)共享庫和靜態(tài)庫都是link一個(gè).lib文件,區(qū)別是,鏈接共享庫時(shí)這個(gè).lib是作為一個(gè)導(dǎo)入庫來使用,這個(gè) .lib 文件包含了鏈接器在編譯時(shí)所需的符號信息(類似于頭文件的概念,只包含聲明,但沒有實(shí)現(xiàn)),這使得編譯器能夠在編譯階段正確引用 dll 中的函數(shù)和數(shù)據(jù)(dll存放的才是真正的可執(zhí)行代碼)。

總結(jié)一下,一個(gè)動(dòng)態(tài)庫的鏈接:

  • 編譯時(shí)鏈接(Compile-Time Linking): 通過 .lib 文件,在編譯階段將項(xiàng)目與 DLL 相關(guān)聯(lián),以獲取符號信息。
  • 運(yùn)行時(shí)加載(Run-Time Loading): 在程序運(yùn)行時(shí)動(dòng)態(tài)加載 DLL 文件,獲取其中的實(shí)際代碼和數(shù)據(jù)。

選擇靜態(tài)鏈接還是動(dòng)態(tài)鏈接取決于應(yīng)用程序的需求和設(shè)計(jì)考慮。靜態(tài)鏈接適用于獨(dú)立分發(fā),而動(dòng)態(tài)鏈接則有助于節(jié)省系統(tǒng)資源和更新庫代碼。

大多數(shù)游戲引擎通常會使用動(dòng)態(tài)鏈接庫(DLL)的方式進(jìn)行鏈接。有幾個(gè)優(yōu)點(diǎn):

  1. 節(jié)省內(nèi)存空間: 游戲引擎通常具有大量共享的功能和資源,如圖形渲染、物理模擬、聲音處理等。通過動(dòng)態(tài)鏈接,多個(gè)游戲?qū)嵗梢怨蚕硐嗤囊娌糠?,減少內(nèi)存占用。

  2. 靈活更新: 如果游戲引擎的某個(gè)模塊需要更新,你只需要替換相應(yīng)的動(dòng)態(tài)鏈接庫文件,而不必重新構(gòu)建整個(gè)游戲。這有助于減少發(fā)布更新所需的時(shí)間。

  3. 插件支持: 動(dòng)態(tài)鏈接庫的模塊化特性使得游戲引擎可以更容易地支持插件。新的功能可以通過添加新的動(dòng)態(tài)鏈接庫來擴(kuò)展游戲引擎,而無需修改已有的代碼。

  4. 維護(hù)性: 游戲引擎的不同部分可以獨(dú)立開發(fā)和維護(hù),因?yàn)樗鼈兌伎梢宰鳛楠?dú)立的動(dòng)態(tài)鏈接庫。這有助于團(tuán)隊(duì)合作和代碼維護(hù)。、


庫存在的最大的意義就是為了將一組相關(guān)的代碼(比如多個(gè)cpp文件,定義了非常多的函數(shù)、類等等)打包成一個(gè)單一的單元,以便在其他項(xiàng)目或者同一項(xiàng)目的不同部分中共享和重用。

比如你是想編譯100個(gè)cpp ,還是直接鏈接一個(gè).lib 或 .dll 明顯后者方便文章來源地址http://www.zghlxwxcb.cn/news/detail-679509.html

到了這里,關(guān)于靜態(tài)鏈接庫和動(dòng)態(tài)鏈接庫的區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 關(guān)于靜態(tài)庫和動(dòng)態(tài)庫的操作

    目錄 靜態(tài)庫 動(dòng)態(tài)庫 1.增加.o文件: 2.刪除.o文件: 查看靜態(tài)庫和動(dòng)態(tài)庫中的函數(shù)名 1.查看靜態(tài)庫中的函數(shù)名(以libexample.a為例): 2. 查看動(dòng)態(tài)庫中的函數(shù)名(以libexample.so為例): 查看動(dòng)態(tài)庫和靜態(tài)庫是32位,還是64位 1.? 如果是動(dòng)態(tài)庫,可以使用: file *.so ? 2. 如果是靜態(tài)庫,可

    2024年02月07日
    瀏覽(17)
  • Linux中靜態(tài)庫和動(dòng)態(tài)庫的使用

    Linux中靜態(tài)庫和動(dòng)態(tài)庫的使用

    介紹: 庫是一個(gè)二進(jìn)制文件,包含的代碼可被程序調(diào)用 標(biāo)準(zhǔn)C庫、數(shù)學(xué)庫、線程庫… 庫有源碼,可下載后編譯;也可以直接安裝二進(jìn)制包 位置一般放在:/lib /usr/lib 庫的知識 庫是事先編譯好的,可以復(fù)用的代碼 在os上運(yùn)行的程序基本上都要使用庫,使用庫可以提高開發(fā)效率

    2024年01月25日
    瀏覽(28)
  • Rust : 與C交互動(dòng)態(tài)庫和靜態(tài)庫的嘗試

    Rust : 與C交互動(dòng)態(tài)庫和靜態(tài)庫的嘗試

    rust調(diào)用C端的庫函數(shù),有很多方法,場景也有所不同。包括windows還是linux,內(nèi)置庫還是自定義庫,還是三方庫等等。 一、rust調(diào)用其內(nèi)置的C庫 這個(gè)很簡單,直接把extern \\\"C\\\"引入即可: 比如,在rust端main.rs中: 不需要做其它的處理,直接cargo run 就可以運(yùn)行。 二、自定義的C庫-以

    2024年02月04日
    瀏覽(16)
  • linux下g++鏈接動(dòng)態(tài)庫和靜態(tài)庫

    頭文件的作用: include的作用就是復(fù)制內(nèi)容到當(dāng)前文件 井號開頭的就是預(yù)處理指令,由預(yù)處理器處理,預(yù)處理階段不關(guān)心代碼,只處理預(yù)處理指令。 頭文件主要 一是為了解決代碼都寫在一個(gè)文件太大了,二是把變量,結(jié)構(gòu)體,函數(shù)聲明這些固定的放在一起 函數(shù)只要聲明了,

    2024年02月09日
    瀏覽(21)
  • 【linux深入剖析】動(dòng)態(tài)庫的使用(續(xù)) | 動(dòng)靜態(tài)庫的鏈接

    【linux深入剖析】動(dòng)態(tài)庫的使用(續(xù)) | 動(dòng)靜態(tài)庫的鏈接

    ??你好,我是 RO-BERRY ?? 致力于C、C++、數(shù)據(jù)結(jié)構(gòu)、TCP/IP、數(shù)據(jù)庫等等一系列知識 ??感謝你的陪伴與支持 ,故事既有了開頭,就要畫上一個(gè)完美的句號,讓我們一起加油 回顧上節(jié),我們在創(chuàng)建了動(dòng)態(tài)庫libmymath.so 我們使用指令 gcc main.c -L. -lmymath -L . (-L + 路徑表示myc這個(gè)庫在哪

    2024年04月15日
    瀏覽(21)
  • 【探索Linux】—— 強(qiáng)大的命令行工具 P.13(文件系統(tǒng) | 軟硬鏈接 | 動(dòng)態(tài)庫和靜態(tài)庫)

    【探索Linux】—— 強(qiáng)大的命令行工具 P.13(文件系統(tǒng) | 軟硬鏈接 | 動(dòng)態(tài)庫和靜態(tài)庫)

    在計(jì)算機(jī)科學(xué)領(lǐng)域中,Linux 系統(tǒng)一直以來都是備受推崇的操作系統(tǒng)之一。其中,文件系統(tǒng)、軟硬鏈接、動(dòng)態(tài)庫和靜態(tài)庫是 Linux 系統(tǒng)中非常重要的概念,在實(shí)際應(yīng)用中扮演著不可或缺的角色。 在上一篇文章中,我們了解了 Linux 系統(tǒng)中文件描述符、重定向以及基礎(chǔ) IO 操作的相關(guān)

    2024年02月04日
    瀏覽(21)
  • 【Linux系統(tǒng)編程】Linux下的編譯器——gcc/g++的使用 及 動(dòng)態(tài)庫和靜態(tài)庫的認(rèn)識

    【Linux系統(tǒng)編程】Linux下的編譯器——gcc/g++的使用 及 動(dòng)態(tài)庫和靜態(tài)庫的認(rèn)識

    這篇文章我們繼續(xù)學(xué)習(xí)Linux中的開發(fā)工具,今天要學(xué)的是: Linux下的編譯器——gcc/g++ 我們先來簡單了解一下它們的概念: gcc (GNU Compiler Collection) 和 g++ 是 Linux 系統(tǒng)上最常用的編譯器。它們是 GNU 組織開發(fā)的一套開源編譯器工具集。 gcc: gcc 是 GNU 編譯器集合中的 C 語言編譯器。

    2024年02月16日
    瀏覽(23)
  • Linux操作命令&靜態(tài)庫和動(dòng)態(tài)庫區(qū)別&大小端&孤兒僵尸進(jìn)程

    cd:切換當(dāng)前目錄 ls:查看當(dāng)前文件與目錄 grep:通常與管道符命令一起使用,用于對一些命令的輸出進(jìn)行篩選和加工 cp:復(fù)制文件或文件夾 mv:移動(dòng)文件或文件夾 rm:刪除文件或文件夾 ps:查看進(jìn)程情況 kill:向進(jìn)程發(fā)送信號 tar:對文件進(jìn)行打包 cat:查看文件內(nèi)容 top:查看

    2024年02月16日
    瀏覽(21)
  • HAL庫和標(biāo)準(zhǔn)庫的區(qū)別

    本文回答來源于chat gpt4,非原創(chuàng),也是我初學(xué)過程中所遇到的問題,答案分享給大家,如有侵權(quán)請聯(lián)系刪除: HAL 庫(Hardware Abstraction Layer,硬件抽象層)和標(biāo)準(zhǔn)庫(Standard Peripheral Library,標(biāo)準(zhǔn)外設(shè)庫,又稱為 SPL)都是 STM32 微控制器的固件庫。它們的主要區(qū)別在于結(jié)構(gòu)和抽象

    2024年02月07日
    瀏覽(23)
  • 動(dòng)態(tài)庫和靜態(tài)庫

    動(dòng)態(tài)庫和靜態(tài)庫

    1. 靜態(tài)庫(.a):程序在編譯鏈接的時(shí)候把庫的代碼鏈接到可執(zhí)行文件中。程序運(yùn)行的時(shí)候?qū)⒉辉傩枰o態(tài)庫。 2. 動(dòng)態(tài)庫(.so):程序在運(yùn)行的時(shí)候才去鏈接動(dòng)態(tài)庫的代碼,多個(gè)程序共享使用庫的代碼。 3. 一個(gè)與動(dòng)態(tài)庫鏈接的可執(zhí)行文件僅僅包含它用到的函數(shù)入口地址的一個(gè)

    2024年02月09日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包