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

【Linux】軟硬鏈接和動(dòng)靜態(tài)庫(kù)

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

軟硬鏈接

軟硬鏈接的區(qū)別:

  • **軟鏈接:**是一個(gè)獨(dú)立文件,有自己獨(dú)立的 inode 和 inode 編號(hào)。
  • **硬鏈接:**不是一個(gè)獨(dú)立的文件,它和目標(biāo)文件使用的是同一個(gè) inode。硬鏈接就是單純的在 Linux 指定的目錄下,給指定的文件新增 文件名 和 inode 編號(hào)的映射關(guān)系!

我們可以通過(guò)如下命令,創(chuàng)建一個(gè)文件的軟硬鏈接:

$ ln -s 文件名 鏈接文件名    # 創(chuàng)建軟連接
$ ln 文件名 鏈接文件名       # 創(chuàng)建硬鏈接

理解硬鏈接:

我們看到,真正找到磁盤上文件的并不是文件名,而是inode。 其實(shí)在linux中可以讓多個(gè)文件名對(duì)應(yīng)于同一個(gè)
inode。

[root@localhost linux]# touch abc [root@localhost linux]# ln abc def 
[root@localhost linux]# ls -1i
abc def 263466 abc 263466 def
  • abc和def的鏈接狀態(tài)完全相同,他們被稱為指向文件的硬鏈接。內(nèi)核記錄了這個(gè)連接數(shù),inode

    263466 的硬連接數(shù)為2。

  • 我們?cè)趧h除文件時(shí)干了兩件事情:1.在目錄中將對(duì)應(yīng)的記錄刪除,2.將硬連接數(shù)-1,如果為0,則將對(duì)應(yīng)

    的磁盤釋放。

硬連接數(shù):

ll

【Linux】軟硬鏈接和動(dòng)靜態(tài)庫(kù),Linux,linux,chrome,運(yùn)維

這些數(shù)字就硬鏈接數(shù)

硬鏈接本質(zhì)就是該文件 inode 屬性中的一個(gè)計(jì)數(shù)器 count。用來(lái)標(biāo)識(shí)就幾個(gè)文件名和我的 inode 建立了映射關(guān)系。簡(jiǎn)而言之,就是有自己文件名指向我的 inode (文件本身) 。

理解軟鏈接:

我們創(chuàng)建一個(gè)軟連接,可以使用下面的指令:

$ ln -s 文件名 鏈接文件名    # 創(chuàng)建軟連接

【Linux】軟硬鏈接和動(dòng)靜態(tài)庫(kù),Linux,linux,chrome,運(yùn)維

我們可以很明顯的發(fā)現(xiàn)他們的inode不同

【Linux】軟硬鏈接和動(dòng)靜態(tài)庫(kù),Linux,linux,chrome,運(yùn)維

我們創(chuàng)建一個(gè)mytest.c,內(nèi)容如下:

#include <stdio.h>
 
int main(void) {
    printf("hello, soft link...\n");
    printf("hello, soft link...\n");
    printf("hello, soft link...\n");
    printf("hello, soft link...\n");
    printf("hello, soft link...\n");
    printf("hello, soft link...\n");
 
    return 0;
}

程序正常運(yùn)行,這里我們?cè)?上級(jí)目錄的上級(jí)目錄 下直接 ./mytest.exe 就可以運(yùn)行。

但是,如果我們?nèi)绻朐谕饷孢\(yùn)行這個(gè)程序就會(huì)很累,因?yàn)樗穆窂接悬c(diǎn)深:

【Linux】軟硬鏈接和動(dòng)靜態(tài)庫(kù),Linux,linux,chrome,運(yùn)維

太麻煩了,所以這里我們就可以給它建立一個(gè)軟連接,解脫雙手:

$ ln -s ./lesson18/mytest.exe my.exe

【Linux】軟硬鏈接和動(dòng)靜態(tài)庫(kù),Linux,linux,chrome,運(yùn)維

直接./my.exe解放雙手

【Linux】軟硬鏈接和動(dòng)靜態(tài)庫(kù),Linux,linux,chrome,運(yùn)維

這就很像window下的快捷桌面方式(忽略右上角的紅色軟件,我是愛(ài)學(xué)習(xí)的孩子)

【Linux】軟硬鏈接和動(dòng)靜態(tài)庫(kù),Linux,linux,chrome,運(yùn)維

軟硬鏈接的刪除:

刪除的話可以直接 rm,但是我們還是建議使用專門的 取消鏈接 的指令:unlink

unlike 文件名

【Linux】軟硬鏈接和動(dòng)靜態(tài)庫(kù),Linux,linux,chrome,運(yùn)維

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

什么是動(dòng)靜態(tài)庫(kù)?

動(dòng)態(tài)庫(kù) .so:程序在運(yùn)行的時(shí)才去鏈接動(dòng)態(tài)庫(kù)的代碼,多個(gè)程序共享使用庫(kù)的代碼。

靜態(tài)庫(kù) .a:程序在編譯鏈接的時(shí)候把庫(kù)的代碼鏈接到可執(zhí)行文件中。程序運(yùn)行的時(shí)候?qū)⒉辉傩枰o態(tài)庫(kù)

一個(gè)與動(dòng)態(tài)庫(kù)鏈接的可執(zhí)行文件僅僅包含它用到的函數(shù)入口地址的一個(gè)表,而不是外部函數(shù)所在目標(biāo)文
件的整個(gè)機(jī)器碼

動(dòng)態(tài)鏈接和靜態(tài)鏈接:

動(dòng)態(tài)鏈接:

在可執(zhí)行文件開(kāi)始運(yùn)行以前,外部函數(shù)的機(jī)器碼由操作系統(tǒng)從磁盤上的該動(dòng)態(tài)庫(kù)中復(fù)制到內(nèi)存中,這個(gè)
過(guò)程稱為動(dòng)態(tài)鏈接(dynamic linking)

動(dòng)態(tài)庫(kù)可以在多個(gè)程序間共享,所以 動(dòng)態(tài)鏈接使得可執(zhí)行文件更小,節(jié)省了磁盤空間。 操作系統(tǒng)采用虛擬內(nèi)存 (VM) 機(jī)制允許物理內(nèi)存中的一份動(dòng)態(tài)庫(kù)被要用到該庫(kù)的所有進(jìn)程共用,節(jié)省了內(nèi)存和磁盤空間。

靜態(tài)鏈接:

靜態(tài)鏈接比較暴力,鏈接時(shí)候直接將目標(biāo)接口的二進(jìn)制代碼全部鏈接到原文件中去,這也就是靜態(tài)鏈接生成的文件這么大的原因了;(畢竟把二進(jìn)制代碼copy過(guò)來(lái)了)

但是這些都是相對(duì)的,有優(yōu)點(diǎn)就有缺點(diǎn):

萬(wàn)一動(dòng)態(tài)庫(kù)路徑中的庫(kù)丟失損壞 ,動(dòng)態(tài)鏈接的程序到目標(biāo)位置了,過(guò)來(lái)用的時(shí)候肯定出錯(cuò)了;

靜態(tài)鏈接因?yàn)榫幾g的時(shí)候吧二進(jìn)制代碼考過(guò)去了,不依賴原生庫(kù),即便原庫(kù)代碼丟失也沒(méi)事;

生成動(dòng)靜態(tài)庫(kù):

生成靜態(tài)庫(kù):

$ ar -rc [靜態(tài)庫(kù)] [.o]

庫(kù)的命名以 lib 開(kāi)頭,靜態(tài)庫(kù)以 .a 結(jié)尾,

【Linux】軟硬鏈接和動(dòng)靜態(tài)庫(kù),Linux,linux,chrome,運(yùn)維

此時(shí)我們就有了靜態(tài)庫(kù),所謂了靜態(tài)庫(kù)就是曾經(jīng)的源文件最終將它翻譯成 .o 打包起來(lái)的東西而已。而別人用我們的庫(kù),就是在庫(kù)里找到 .o 然后丟到而可執(zhí)行程序里就行。

生成動(dòng)態(tài)庫(kù):

動(dòng)態(tài)庫(kù)比靜態(tài)庫(kù)要復(fù)雜一些,

gcc -fPIC -c myadd.c -o myadd.o

gcc -shared -o libmyadd.so myadd.o

別在于 形成 .o 的時(shí)候是需要加上 gcc -fPIC 的,這是為了產(chǎn)生 與位置無(wú)關(guān)碼。

【Linux】軟硬鏈接和動(dòng)靜態(tài)庫(kù),Linux,linux,chrome,運(yùn)維

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

現(xiàn)在我們站在使用的人的角度,學(xué)習(xí)如何使用靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)

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

-Ⅰ 表示我們的頭文件查找的路徑

-L 表示庫(kù)文件搜索的路徑

-l 在-L 指定的路徑下你要鏈接哪一個(gè)庫(kù).
示例:

gcc mytest.c -o mytest -I lib-dyl/include/ -L lib-dyl/lib/ -l mymath

形成可執(zhí)行程序之后,已經(jīng)把需要的代碼拷貝到我的代碼中,運(yùn)行時(shí)不依賴你的庫(kù)。不需要運(yùn)行時(shí)查找。

為什么動(dòng)態(tài)庫(kù)會(huì)有這個(gè)問(wèn)題?想辦法讓進(jìn)程找到動(dòng)態(tài)庫(kù)即可。

error while loading shared libraries 解決方案:

① 動(dòng)態(tài)庫(kù)拷貝到系統(tǒng)路徑下 /lib64 安裝。

② 通過(guò)導(dǎo)入環(huán)境變量的方式 —— 程序運(yùn)行的時(shí)候,會(huì)在環(huán)境變量中查找自己需要的動(dòng)態(tài)庫(kù)路徑 —— LD_LIBRARY_PATH。

③ 系統(tǒng)配置文件來(lái)做。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-752624.html

不需要運(yùn)行時(shí)查找。

為什么動(dòng)態(tài)庫(kù)會(huì)有這個(gè)問(wèn)題?想辦法讓進(jìn)程找到動(dòng)態(tài)庫(kù)即可。

error while loading shared libraries 解決方案:

① 動(dòng)態(tài)庫(kù)拷貝到系統(tǒng)路徑下 /lib64 安裝。

② 通過(guò)導(dǎo)入環(huán)境變量的方式 —— 程序運(yùn)行的時(shí)候,會(huì)在環(huán)境變量中查找自己需要的動(dòng)態(tài)庫(kù)路徑 —— LD_LIBRARY_PATH。

③ 系統(tǒng)配置文件來(lái)做。

到了這里,關(guān)于【Linux】軟硬鏈接和動(dòng)靜態(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)文章

  • 【Linux】軟硬鏈接與動(dòng)靜態(tài)庫(kù)

    【Linux】軟硬鏈接與動(dòng)靜態(tài)庫(kù)

    相關(guān)文章: 【Linux】動(dòng)靜態(tài)庫(kù)以及動(dòng)靜態(tài)鏈接 【Linux】基礎(chǔ)IO_文件系統(tǒng) 我們知道,每一個(gè)文件都會(huì)有自己的inode編號(hào),我們可以通過(guò)如下指令來(lái)查看: ?我們發(fā)現(xiàn), 每一個(gè)不同文件的inode編號(hào)都不相同,所以inode可以說(shuō)是用來(lái)標(biāo)識(shí)文件的標(biāo)識(shí)符 。接下來(lái),我們通過(guò)下面指令來(lái)

    2024年02月10日
    瀏覽(20)
  • 【看表情包學(xué)Linux】軟硬鏈接 | 軟連接數(shù) | 創(chuàng)建軟硬鏈接 | 動(dòng)靜態(tài)庫(kù) | 生成靜態(tài)庫(kù) | 生成動(dòng)態(tài)庫(kù)

    【看表情包學(xué)Linux】軟硬鏈接 | 軟連接數(shù) | 創(chuàng)建軟硬鏈接 | 動(dòng)靜態(tài)庫(kù) | 生成靜態(tài)庫(kù) | 生成動(dòng)態(tài)庫(kù)

    ?? ??? 爆笑 教程 ????《看表情包學(xué)Linux》?? ? 猛戳訂閱 ? ? ?? ?? 寫在前面: 上一章我們講解了 inode,為文件系統(tǒng)收了尾,這幾章我們充分地講解完了文件系統(tǒng)的知識(shí)點(diǎn),現(xiàn)在我們開(kāi)始開(kāi)始學(xué)習(xí)軟硬鏈接了。如果沒(méi)有文件系統(tǒng)的鋪墊,想直接理解軟硬鏈接難免有些困

    2024年02月14日
    瀏覽(40)
  • 【看表情包學(xué)Linux】軟硬鏈接 | 動(dòng)靜態(tài)庫(kù)

    【看表情包學(xué)Linux】軟硬鏈接 | 動(dòng)靜態(tài)庫(kù)

    ?? ??? 爆笑 教程 ????《看表情包學(xué)Linux》?? ? 猛戳訂閱 ? ? ?? ?? 寫在前面: 上一章我們講解了 inode,為文件系統(tǒng)收了尾,這幾章我們充分地講解完了文件系統(tǒng)的知識(shí)點(diǎn),現(xiàn)在我們開(kāi)始開(kāi)始學(xué)習(xí)軟硬鏈接了。如果沒(méi)有文件系統(tǒng)的鋪墊,想直接理解軟硬鏈接難免有些困

    2024年02月16日
    瀏覽(21)
  • 【Linux】基礎(chǔ)IO——文件系統(tǒng)|軟硬鏈接|動(dòng)靜態(tài)庫(kù)

    【Linux】基礎(chǔ)IO——文件系統(tǒng)|軟硬鏈接|動(dòng)靜態(tài)庫(kù)

    基于上篇博客所寫到的文件各種操作都是基于被打開(kāi)文件所進(jìn)行操作的,那么如果一個(gè)文件沒(méi)有被打開(kāi)它存在哪里呢?這個(gè)答案毫無(wú)疑問(wèn)肯定是存在于磁盤上的。那么,對(duì)于一個(gè)沒(méi)有打開(kāi)的文件(也就是磁盤文件)我們應(yīng)該如何理解呢? 這里我們所要講的磁盤是機(jī)械硬盤、即

    2024年02月04日
    瀏覽(21)
  • Linux基礎(chǔ)IO【軟硬鏈接與動(dòng)靜態(tài)庫(kù)】

    Linux基礎(chǔ)IO【軟硬鏈接與動(dòng)靜態(tài)庫(kù)】

    ?個(gè)人主頁(yè): 北 海 ??所屬專欄: Linux學(xué)習(xí)之旅 ??操作環(huán)境: CentOS 7.6 阿里云遠(yuǎn)程服務(wù)器 假設(shè)你下載了一款游戲,你是否會(huì)跑到游戲所在目錄中雙擊 .exe 打開(kāi)游戲?答案是不會(huì),大多數(shù)人都會(huì)通過(guò)桌面的快捷方式直接打開(kāi)文件,而這個(gè)快捷方式實(shí)際就是對(duì) .exe 的 軟鏈接 文

    2024年02月02日
    瀏覽(24)
  • 【linux深入剖析】深入理解軟硬鏈接 | 動(dòng)靜態(tài)庫(kù)的制作以及使用

    【linux深入剖析】深入理解軟硬鏈接 | 動(dòng)靜態(tài)庫(kù)的制作以及使用

    ??你好,我是 RO-BERRY ?? 致力于C、C++、數(shù)據(jù)結(jié)構(gòu)、TCP/IP、數(shù)據(jù)庫(kù)等等一系列知識(shí) ??感謝你的陪伴與支持 ,故事既有了開(kāi)頭,就要畫上一個(gè)完美的句號(hào),讓我們一起加油 軟鏈接和硬鏈接是在Linux系統(tǒng)中常見(jiàn)的文件鏈接方式。 軟鏈接(Symbolic Link): 軟鏈接是一個(gè)指向目標(biāo)文

    2024年04月13日
    瀏覽(25)
  • [Linux]理解文件系統(tǒng)!動(dòng)靜態(tài)庫(kù)詳細(xì)制作使用?。ň彌_區(qū)、inode、軟硬鏈接、動(dòng)靜態(tài)庫(kù))

    [Linux]理解文件系統(tǒng)!動(dòng)靜態(tài)庫(kù)詳細(xì)制作使用?。ň彌_區(qū)、inode、軟硬鏈接、動(dòng)靜態(tài)庫(kù))

    ? ? ? ? hello,大家好,這里是bang___bang_,今天來(lái)談?wù)劦奈募到y(tǒng)知識(shí),包含有緩沖區(qū)、inode、軟硬鏈接、動(dòng)靜態(tài)庫(kù)。本篇旨在分享記錄知識(shí),如有需要,希望能有所幫助。 目錄 1??緩沖區(qū) ??緩沖區(qū)的意義 ??常見(jiàn)緩沖區(qū)刷新策略 ??緩沖區(qū)位置猜想 ??現(xiàn)象猜測(cè) ??現(xiàn)象解

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

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

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

    2024年02月04日
    瀏覽(21)
  • 【Linux】-- 基礎(chǔ)IO和動(dòng)靜態(tài)庫(kù)

    【Linux】-- 基礎(chǔ)IO和動(dòng)靜態(tài)庫(kù)

    對(duì)于C文件接口,假如想向特定文件寫入字符串: cFile.c 執(zhí)行結(jié)果如下,查看log.txt文件: 假如想從特定文件讀字符串,從log.txt中按行讀取,讀取的內(nèi)容放在緩沖區(qū),如果fgets讀取成功,返回讀取的新字符串的地址,如果讀取失敗就返回NULL,feof用來(lái)判斷文件是否正常退出,即

    2024年02月07日
    瀏覽(23)
  • linux之文件系統(tǒng)、inode和動(dòng)靜態(tài)庫(kù)制作和發(fā)布

    linux之文件系統(tǒng)、inode和動(dòng)靜態(tài)庫(kù)制作和發(fā)布

    1.沒(méi)有被打開(kāi)的文件都在磁盤上? --- 磁盤級(jí)文件 2.對(duì)磁盤級(jí)別的文件,我們的側(cè)重點(diǎn) 單個(gè)文件角度 -- 這個(gè)文件在哪里,有多大,其他屬性是什么? 站在系統(tǒng)角度 --? 一共有多少文件?各自屬性在哪里?如何快速找到?可以存儲(chǔ)多少個(gè)文件?如何快速找到指定文件?如何對(duì)此

    2024年04月10日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包