一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux應(yīng)用程序找不到動(dòng)態(tài)庫怎么辦?

汽車電子技術(shù) ? 來源:嵌入式情報(bào)局 ? 作者:情報(bào)小哥 ? 2023-02-21 11:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1、靜態(tài)庫與動(dòng)態(tài)庫

所謂的庫,其實(shí)都是一些二進(jìn)制的可執(zhí)行文件集合,靜態(tài)庫在linux中一般命名形式為libxxx.a,而動(dòng)態(tài)庫一般常用libxxx.so。

他們都可以通過源文件編譯得到,往期對(duì)這兩種庫都過介紹:

Linux應(yīng)用編程之靜態(tài)庫的制作與使用

Linux應(yīng)用編程之動(dòng)態(tài)庫的制作與使用

Linux應(yīng)用編程之動(dòng)靜態(tài)鏈接庫輔助技巧(ldd,-static)

對(duì)于靜態(tài)庫主要是用于程序編譯的過程中提供相應(yīng)的函數(shù)實(shí)現(xiàn),最終使用到該靜態(tài)庫中的內(nèi)容會(huì)整合到最終的程序中,這樣程序在運(yùn)行過程中就不再依賴外部其他庫了。

而動(dòng)態(tài)庫并不是用于編譯期,而是在運(yùn)行期通過動(dòng)態(tài)加載器來加載庫函數(shù),使得可執(zhí)行程序得以運(yùn)行,當(dāng)然動(dòng)態(tài)鏈接也分不同的加載時(shí)期,相對(duì)比較靈活,有些程序一運(yùn)行就需要進(jìn)行加載,而有些的動(dòng)態(tài)庫是在執(zhí)行過程中加載。

2、動(dòng)靜態(tài)庫優(yōu)缺點(diǎn)

那么動(dòng)態(tài)庫與靜態(tài)庫的優(yōu)缺點(diǎn)也比較明顯,使用靜態(tài)庫編譯生成的可執(zhí)行文件對(duì)外界沒有什么需求,依賴少,相應(yīng)的其可執(zhí)行程序體積變大,一旦修改需要重新編譯。

而對(duì)于動(dòng)態(tài)庫,由于是程序運(yùn)行時(shí)候加載相應(yīng)的動(dòng)態(tài)庫,所以其可執(zhí)行文件相對(duì)要小很多,同時(shí)對(duì)于庫的修改,僅僅編譯和替換相應(yīng)的動(dòng)態(tài)庫即可,更加的方便。

3、Linux中動(dòng)態(tài)庫的查找

由于可執(zhí)行程序依賴動(dòng)態(tài)鏈接庫,所以存在一個(gè)問題:從哪里找動(dòng)態(tài)鏈接庫?,經(jīng)常我們動(dòng)態(tài)編譯的可執(zhí)行應(yīng)用程序,由于系統(tǒng)中、或者自己沒有指定相應(yīng)的庫路徑,就會(huì)報(bào)運(yùn)行失敗,提示缺少相應(yīng)的庫。

圖片

這樣就需要在系統(tǒng)中安裝對(duì)應(yīng)的庫,并且把庫放在動(dòng)態(tài)加載器所能搜索到的位置,在linux中有如下幾種搜索路徑:

1、在可執(zhí)行程序編譯的時(shí)候通過編譯選項(xiàng)指定相應(yīng)的動(dòng)態(tài)庫路徑,這樣在程序運(yùn)行的時(shí)候就會(huì)在文件系統(tǒng)對(duì)應(yīng)路徑加載對(duì)應(yīng)的動(dòng)態(tài)庫,比如通過使用-Wl,-rpath=your path來進(jìn)行編譯,編譯成功的可執(zhí)行程序你可以使用ldd命令來查看是否路徑指定成功,可執(zhí)行程序幾乎是第一時(shí)間搜索該路徑查看動(dòng)態(tài)庫是否存在。

2、通過使用環(huán)境變量 : LD_LIBRARY_PATH指定,可以使用如下命令進(jìn)行查看:

1echo $LD_LIBRARY_PATH

通過export在已有的路徑上進(jìn)行添加:

1export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:your path

跟之前給大家介紹的PATH環(huán)境變量的使用是一致的,當(dāng)可執(zhí)行程序找到指定路徑,會(huì)在該環(huán)境變量中指定的路徑進(jìn)行查找,當(dāng)然修改該環(huán)境變量會(huì)影響到所有的應(yīng)用程序動(dòng)態(tài)加載的搜索。

3、系統(tǒng)默認(rèn)的路徑/lib和/user/lib進(jìn)行搜索,當(dāng)然在用戶級(jí)的程序大部分都會(huì)安裝在/usr/local中,所以用戶級(jí)的庫大部分也會(huì)放在/user/local/lib路徑中。

4、當(dāng)然在Ubuntu中還通常在配置文件/etc/ld.so.conf中指定的動(dòng)態(tài)庫搜索路徑,不過要記得當(dāng)我們把相應(yīng)的動(dòng)態(tài)庫路徑添加進(jìn)入以后,需要使用ldconfig進(jìn)行配置才能生效。

最 后

好了,這里小哥就簡(jiǎn)單介紹了動(dòng)態(tài)庫與靜態(tài)庫的差異,以及Linux系統(tǒng)一般如何搜索動(dòng)態(tài)庫,本系列文章后續(xù)還會(huì)更新,記得關(guān)注學(xué)習(xí)哦。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11508

    瀏覽量

    213570
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4379

    瀏覽量

    64748
  • 靜態(tài)庫
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

    7615
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    proteus元件找不到怎么辦?

    `誰有元件啊我這里好多元件都找不到不知道該怎么辦`
    發(fā)表于 05-20 21:13

    pcb板找不到元件怎么辦,求大神呀

    pcb板找不到元件怎么辦,求大神呀
    發(fā)表于 06-30 23:00

    Altium Designer找不到元件怎么辦?

    請(qǐng)問一下各位,我在Altium Designer里面繪制電路圖時(shí)找不到marvell公司的88e1111芯片的元件,不知道該怎么辦?網(wǎng)上到處都是比較全的元件,下下來也沒見怎么個(gè)全法,所以請(qǐng)教一下各位有沒有關(guān)于Marvell 公
    發(fā)表于 07-19 11:34

    找不到TDA2822怎么辦

    怎么用MUltisim做有關(guān)TDA2822仿真,找不到這個(gè)原件怎么辦?用其他的怎么替代
    發(fā)表于 07-22 15:41

    在***原件找不到所需器件怎么辦,新手啊

    在***原件找不到所需器件怎么辦
    發(fā)表于 10-23 17:46

    AD10工程管理窗口和窗口找不到,怎么辦

    AD10工程管理窗口和窗口找不到怎么辦怎樣是AD10恢復(fù)默認(rèn)設(shè)
    發(fā)表于 01-16 10:41

    orcad仿真中找不到TDA2030怎么辦?沒有那個(gè)

    orcad中找不到TDA2030怎么辦?沒有那個(gè)
    發(fā)表于 02-22 20:16

    求助,ChipWatcher找不到信號(hào)怎么辦?

    ChipWatcher找不到信號(hào)怎么辦?
    發(fā)表于 08-11 10:01

    電腦找不到硬盤怎么辦

    有時(shí)候開機(jī)時(shí)電腦找不到硬盤怎么辦,本內(nèi)容分析了幾種找不到硬盤的解決方案。
    發(fā)表于 05-08 11:16 ?6.3w次閱讀

    linux無法識(shí)別U盤怎么辦

    linux無法識(shí)別U盤怎么辦?
    發(fā)表于 05-19 09:08 ?1.7w次閱讀
    <b class='flag-5'>linux</b>無法識(shí)別U盤<b class='flag-5'>怎么辦</b>

    linux找不到動(dòng)態(tài)如何解決

    解決linux找不到動(dòng)態(tài)的問題
    發(fā)表于 06-13 09:43 ?2425次閱讀

    找不到服務(wù)器或DNS錯(cuò)誤時(shí)該怎么辦

    陽光系統(tǒng)下載 找不到服務(wù)器或DNS錯(cuò)誤怎么辦 我們?cè)谑褂秒娔X的時(shí)候,經(jīng)常會(huì)瀏覽網(wǎng)頁,但是在瀏覽網(wǎng)頁的過程中經(jīng)常出現(xiàn)無法顯示此網(wǎng)頁、找不到服務(wù)器或DNS錯(cuò)誤,那么我們遇到網(wǎng)頁提示找不到
    發(fā)表于 02-03 15:07 ?4529次閱讀
    <b class='flag-5'>找不到</b>服務(wù)器或DNS錯(cuò)誤時(shí)該<b class='flag-5'>怎么辦</b>

    keil5中找不到或沒有對(duì)應(yīng)的芯片怎么辦?超詳細(xì)?。?/a>

    keil5中找不到或沒有對(duì)應(yīng)的芯片怎么辦?超詳細(xì)??!安裝完Keil5之后,有的小伙伴們是不是會(huì)發(fā)現(xiàn),為什么新建工程的時(shí)候找不到自己想要的CUP型號(hào),如下圖:這里就假設(shè)要找的CUP型號(hào)是三星
    發(fā)表于 12-23 19:16 ?30次下載
    keil5中<b class='flag-5'>找不到</b>或沒有對(duì)應(yīng)的芯片<b class='flag-5'>怎么辦</b>?超詳細(xì)?。? />    </a>
</div>                              <div   id=

    虛擬機(jī)里找不到adb設(shè)備怎么辦

    虛擬機(jī)里找不到adb設(shè)備
    的頭像 發(fā)表于 10-13 18:45 ?2945次閱讀

    multisim找不到元件怎么辦

    問題以及如何解決它。 Multisim 找不到元件的原因 在使用 Multisim 時(shí),可能會(huì)遇到找不到元件的情況。這可能是由于以下原因?qū)е碌模?1.1 軟件版本問題:不同版本的 Multisim 中可能包含不同的元件。如果您
    的頭像 發(fā)表于 02-23 15:44 ?1.3w次閱讀