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

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

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

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

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

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

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

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

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

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

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

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

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

2、動靜態(tài)庫優(yōu)缺點

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

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

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

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

圖片

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

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

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

1echo $LD_LIBRARY_PATH

通過export在已有的路徑上進行添加:

1export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:your path

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

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

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

最 后

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

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

    關(guān)注

    87

    文章

    11182

    瀏覽量

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

    關(guān)注

    3

    文章

    4264

    瀏覽量

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

    關(guān)注

    0

    文章

    21

    瀏覽量

    7414
收藏 人收藏

    評論

    相關(guān)推薦

    proteus元件找不到怎么辦?

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

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

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

    Altium Designer找不到元件怎么辦

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

    找不到TDA2822怎么辦

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

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

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

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

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

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

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

    matlab找不到的問題

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

    求助,ChipWatcher找不到信號怎么辦

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

    電腦找不到硬盤怎么辦

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

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

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

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

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

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

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

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

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

    multisim找不到元件怎么辦

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