RM新时代网站-首页

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)庫(kù)怎么辦?

汽車電子技術(shù) ? 來(lái)源:嵌入式情報(bào)局 ? 作者:情報(bào)小哥 ? 2023-02-21 11:02 ? 次閱讀

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

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

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

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

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

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

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

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

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

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

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

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

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

圖片

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

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

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

1echo $LD_LIBRARY_PATH

通過(guò)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í)的庫(kù)大部分也會(huì)放在/user/local/lib路徑中。

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

最 后

好了,這里小哥就簡(jiǎn)單介紹了動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)的差異,以及Linux系統(tǒng)一般如何搜索動(dòng)態(tài)庫(kù),本系列文章后續(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ī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11292

    瀏覽量

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

    關(guān)注

    3

    文章

    4327

    瀏覽量

    62569
  • 靜態(tài)庫(kù)
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

    7426
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    proteus元件庫(kù)找不到怎么辦?

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

    pcb板找不到元件庫(kù)怎么辦,求大神呀

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

    Altium Designer找不到元件怎么辦?

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

    找不到TDA2822怎么辦

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

    在***原件庫(kù)找不到所需器件怎么辦,新手啊

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

    AD10工程管理窗口和庫(kù)窗口找不到,怎么辦

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

    orcad仿真中找不到TDA2030怎么辦?沒(méi)有那個(gè)庫(kù)

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

    matlab找不到庫(kù)的問(wèn)題

    大神們,你們好: 我初學(xué)電力電子simulink仿真,找不到connectors這個(gè)庫(kù)怎么辦,我要T節(jié)點(diǎn)。 還有就是,有沒(méi)有一個(gè)供電力電子仿真的專門的庫(kù)下載,像AD里的
    發(fā)表于 03-31 18:39

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

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

    電腦找不到硬盤怎么辦

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

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

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

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

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

    keil5中找不到或沒(méi)有對(duì)應(yīng)的芯片怎么辦?超詳細(xì)??!

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

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

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

    multisim找不到元件怎么辦

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