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

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

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

一、什么是庫(kù)?

庫(kù)是一種可執(zhí)行代碼的二進(jìn)制形式,可以被操作系統(tǒng)載入內(nèi)存執(zhí)行。就是將源代碼轉(zhuǎn)化為二進(jìn)制格式的源代碼,相當(dāng)于進(jìn)行了加密,別人可以使用庫(kù),但是看不到庫(kù)中的內(nèi)容。

常見的庫(kù)類型

共享庫(kù) 靜態(tài)庫(kù) 動(dòng)態(tài)庫(kù)

win32平臺(tái)下,靜態(tài)庫(kù)通常后綴為.lib,動(dòng)態(tài)庫(kù)為.dll 。

linux平臺(tái)下,靜態(tài)庫(kù)通常后綴為.a,動(dòng)態(tài)庫(kù)為.so 。

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

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

?

二、靜態(tài)庫(kù) 、動(dòng)態(tài)庫(kù)

所謂靜態(tài)庫(kù),就是在靜態(tài)編譯時(shí)由編譯器到指定目錄尋找并且進(jìn)行鏈接,一旦鏈接完成,最終的可執(zhí)行程序中就包含了該庫(kù)文件中的所有有用信息,包括代碼段、數(shù)據(jù)段等。

相對(duì)于動(dòng)態(tài)庫(kù),靜態(tài)庫(kù)的優(yōu)點(diǎn)在于直接被鏈接進(jìn)可執(zhí)行程序中,之后,該可執(zhí)行程序就不再依賴于運(yùn)行環(huán)境的設(shè)置了(當(dāng)然仍然會(huì)依賴于 CPU指令集和操作系統(tǒng)支持的可執(zhí)行文件格式等硬性限制)。

所謂動(dòng)態(tài)庫(kù),就是在應(yīng)用程序運(yùn)行時(shí),由操作系統(tǒng)根據(jù)應(yīng)用程序的請(qǐng)求,動(dòng)態(tài)到指定目錄下尋找并裝載入內(nèi)存中,同時(shí)需要進(jìn)行地址重定向。

而動(dòng)態(tài)庫(kù)的優(yōu)點(diǎn)在于,用戶甚至可以在程序運(yùn)行時(shí)隨時(shí)替換該動(dòng)態(tài)庫(kù),這就構(gòu)成了動(dòng)態(tài)插件系統(tǒng)的基礎(chǔ)。具體使用靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù),由程序員根據(jù)需要自己決定。

另外,需要說(shuō)明的一點(diǎn)是,從底層實(shí)現(xiàn)上,動(dòng)態(tài)庫(kù)的效率可能會(huì)比靜態(tài)庫(kù)稍差一點(diǎn)點(diǎn),注意,這里用了“可能”二字,具體差不差,還得看寫程序的人。之所以可能會(huì)差,主要原因在于,程序總無(wú)法直接調(diào)用動(dòng)態(tài)庫(kù)中的函數(shù)符號(hào),而只能通過(guò)調(diào)用操作系統(tǒng)的runtime enviroment接口來(lái)動(dòng)態(tài)載入某個(gè)函數(shù)符號(hào),同時(shí)獲得該函數(shù)符號(hào)在內(nèi)存中的地址,將其保存為函數(shù)指針進(jìn)行調(diào)用,這就在函數(shù)調(diào)用時(shí)增加了一次間接尋址的過(guò)程。

三、庫(kù)的制作和使用

1、靜態(tài)庫(kù)的制作:? 格式xxxx.a

生成xxx.o文件? ? ? ??gcc calcufuncs.c –c??

使用?ar?命令? ??xxx.o文件生成xxx.a靜態(tài)庫(kù)文件? ? ? ? ar rcs libcalcufunc.a calcufuncs.o??

靜態(tài)庫(kù)的使用

gcc calculator.c -lcalcufunc -L ./ -o mainProStatic

???????? -lcalcufunc? –l是指定要用的靜態(tài)庫(kù),庫(kù)名砍頭去掉lib去尾去掉.a

? ? ? ???-L ./? 告訴gcc編譯器從-L指定的路徑去找靜態(tài)庫(kù),默認(rèn)是從/usr/lib/usr/local/lib去找

2、動(dòng)態(tài)庫(kù)的制作????????????? 生成xxx.so文件

gcc -shared -fpic calcufuncs.c -o libcalc.so

-shared 指定生成動(dòng)態(tài)庫(kù)

-fpic? 標(biāo)準(zhǔn),用于編譯階段,在生成目標(biāo)文件時(shí)就得使用該選項(xiàng)。以生成位置無(wú)關(guān)的代碼

動(dòng)態(tài)庫(kù)的使用

gcc calculator.c -lcalc -L ./ -o mainProDy

??動(dòng)態(tài)庫(kù)優(yōu)先從當(dāng)前路徑去找,沒找到的話再去 /usr/lib/ 下去找通常動(dòng)態(tài)庫(kù)拷貝到 /usr/lib/ 下即可:

sudo cp libcalc.so /usr/lib/? ? ? ? ? ? ? ??

動(dòng)態(tài)庫(kù)無(wú)法加載(引用動(dòng)態(tài)庫(kù),怎么指定動(dòng)態(tài)庫(kù)的位置):

臨時(shí)設(shè)置:在終端進(jìn)行:export LD_LIBRARY_PATH=“動(dòng)態(tài)庫(kù)的路徑”

帶動(dòng)態(tài)庫(kù)的程序(可以指定該程序運(yùn)行時(shí)候,在LD_LIBRARY_PATH所指定的路徑去找?guī)煳募?/strong>

或者利用腳本

vi start.sh? ? ?//創(chuàng)建一個(gè).sh文件

export LD_LIBRARY_PATH="/home/pi/test//動(dòng)態(tài)庫(kù)的路徑"

./mianPrody? ?//所要執(zhí)行的程序名稱

//在文件夾中輸入以上內(nèi)容

?chmod +x start.sh? ? ?//給腳本加可執(zhí)行的的權(quán)限

./start.sh? ? ? ? ? ? ? ? ? ? ?//執(zhí)行該腳本

./mainProDy(用shell腳本運(yùn)行,腳本需要加權(quán)限 chmod +x xxx文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-437992.html

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

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

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

相關(guān)文章

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

    在編譯時(shí)將庫(kù)的代碼( .lib文件 )和應(yīng)用程序的代碼合并在一起,生成一個(gè)單獨(dú)的可執(zhí)行文件。 發(fā)布時(shí)非常方便,直接一個(gè).exe文件即可 庫(kù)的代碼在編譯時(shí)和鏈接時(shí)與應(yīng)用程序分開。應(yīng)用程序包含對(duì)庫(kù)的引用( .lib文件 ,在這里被稱為導(dǎo)入庫(kù)),但不包含庫(kù)的實(shí)際代碼。 在 運(yùn)行

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

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

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

    2024年02月16日
    瀏覽(23)
  • Rust : 與C交互動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)的嘗試

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

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

    2024年02月04日
    瀏覽(16)
  • 【嵌入式學(xué)習(xí)筆記-02】什么是庫(kù)文件,靜態(tài)庫(kù)的制作和使用,動(dòng)態(tài)庫(kù)的制作和使用,動(dòng)態(tài)庫(kù)的動(dòng)態(tài)加載

    【嵌入式學(xué)習(xí)筆記-02】什么是庫(kù)文件,靜態(tài)庫(kù)的制作和使用,動(dòng)態(tài)庫(kù)的制作和使用,動(dòng)態(tài)庫(kù)的動(dòng)態(tài)加載

    【嵌入式學(xué)習(xí)筆記-02】什么是庫(kù)文件,靜態(tài)庫(kù)的制作和使用,動(dòng)態(tài)庫(kù)的制作和使用,動(dòng)態(tài)庫(kù)的動(dòng)態(tài)加載 單一模型: 將程序中所有功能全部實(shí)現(xiàn)于一個(gè)單一的源文件內(nèi)部。編譯時(shí)間長(zhǎng),不易于維護(hù)和升級(jí)不易于協(xié)作開發(fā)。 分離模型 將程序中的不同功能模塊劃分到不同的源文件

    2024年01月15日
    瀏覽(17)
  • cmake-動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)及使用OpenCV第三方庫(kù)

    cmake-動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)及使用OpenCV第三方庫(kù)

    ?項(xiàng)目中會(huì)有單個(gè)源文件構(gòu)建的多個(gè)可執(zhí)行文件的可能。項(xiàng)目中有多個(gè)源文件,通常分布在不同子目錄中。這種實(shí)踐有助于項(xiàng)目的源代碼結(jié)構(gòu),而且支持模塊化、代碼重用和關(guān)注點(diǎn)分離。同時(shí),這種分離可以簡(jiǎn)化并加速項(xiàng)目的重新編譯。 add.h add.cpp main.cpp ?首先這是我們的目

    2024年01月24日
    瀏覽(126)
  • 動(dòng)態(tài)庫(kù)、靜態(tài)庫(kù)的構(gòu)建與使用

    動(dòng)態(tài)庫(kù)、靜態(tài)庫(kù)的構(gòu)建與使用

    所謂靜態(tài)、動(dòng)態(tài)是指 鏈接 。回顧一下,將一個(gè)程序編譯成可執(zhí)行程序的步驟: 鏈接 : 把外部函數(shù)的代碼(通常是后綴名為.lib和.a的文件),添加到可執(zhí)行文件中。這就叫做連接(linking)。這種通過(guò)拷貝,將外部函數(shù)庫(kù)添加到可執(zhí)行文件的方式,叫做靜態(tài)連接(static linki

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

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

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

    2024年04月15日
    瀏覽(21)
  • 動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)

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

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

    2024年02月09日
    瀏覽(18)
  • C靜態(tài)庫(kù)的創(chuàng)建與使用--為什么要引入靜態(tài)庫(kù)?

    C靜態(tài)庫(kù)的創(chuàng)建與使用--為什么要引入靜態(tài)庫(kù)?

    C源程序需要經(jīng)過(guò)預(yù)處理、編譯、匯編幾個(gè)階段,得到各自源文件對(duì)應(yīng)的 可重定位目標(biāo)文件 ,可重定位目標(biāo)文件就是各個(gè)源文件的二進(jìn)制機(jī)器代碼,一般是.o格式。比如:util1.c、util2.c及main.c三個(gè)C源文件,經(jīng)過(guò)預(yù)處理器、編譯器、匯編器的處理,就可以得到各自的目標(biāo)文件u

    2024年02月08日
    瀏覽(23)
  • 制作靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)

    制作靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)

    目錄 制作靜態(tài)庫(kù) ar命令 使用makefile制作靜態(tài)庫(kù) 如何發(fā)布自己的靜態(tài)庫(kù)給別人呢? 如何使用靜態(tài)庫(kù)呢? 方法一 方法二 制作動(dòng)態(tài)庫(kù) 使用動(dòng)態(tài)庫(kù)遇到的問(wèn)題 上面的問(wèn)題如何解決呢?(如何使用動(dòng)態(tài)庫(kù)) 1.方法一 2.方法二 3.方法三 4.方法四 搜索優(yōu)先級(jí) Linux默認(rèn)頭文件的搜索順序

    2024年02月03日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包