在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

如何查看linux程序共享庫呢?

嵌入式小生 ? 來源:嵌入式小生 ? 2023-08-28 09:11 ? 次閱讀

一、開篇

linux系統(tǒng)中,程序通常需要依賴于外部庫來正常工作。這些庫可以直接編譯到程序中,也可以從共享庫池中加載。使用共享庫有助于減小程序大小,簡化開發(fā)和打包。在linux中,共享庫通常存儲在/lib或/usr/lib目錄下。

不同的linux發(fā)行版甚至同一發(fā)行版的版本可能使用不同的庫,從而導(dǎo)致一個發(fā)行版編譯的程序在另一個發(fā)行版上運(yùn)行出現(xiàn)故障。當(dāng)系統(tǒng)中缺少所需庫時,這時可能會遇到錯誤。在嵌入式linux環(huán)境中,庫文件更是非常關(guān)鍵,因為嵌入式linux中硬件環(huán)境往往具有嚴(yán)苛的限制,太多的庫將無法完整放入對應(yīng)的硬件環(huán)境下,所以重新組建linux下的運(yùn)行庫在嵌入式linux設(shè)計中是重要的一環(huán)操作。

要解決共享庫加載的問題,我們可以使用一些工具和命令來確定程序所依賴的共享庫,本文將討論實現(xiàn)這一目標(biāo)的幾種方法。

二、ldd命令

ldd命令用于打印出共享對象的依賴。語法如下:

ldd[選項]文件

可選的參數(shù)如下:

--help印出這份說明然后離開
--version印出版本信息然后離開
-d,--data-relocs進(jìn)程數(shù)據(jù)重尋址
-r,--function-relocs進(jìn)程數(shù)據(jù)和函數(shù)重尋址
-u,--unused印出未使用的直接依賴關(guān)系
-v,--verbose印出所有信息

例如:

f4d7eef4-4538-11ee-a2ef-92fbcf53809c.png

使用-v可查看更詳細(xì)的信息:

f50b460a-4538-11ee-a2ef-92fbcf53809c.png

注意,使用ldd命令時可能會導(dǎo)致程序運(yùn)行,因此不要在不受信任的可執(zhí)行文件上使用ldd。

三、readelf命令

readelf命令是一個強(qiáng)大的命令,用于顯示ELF文件的信息,可使用該命令查看共享庫的依賴,方法如下:

readelf--dynamic./app|grepNEEDED

例如下列命令用于查看/usr/bin/dir的依賴庫:

f53cbdca-4538-11ee-a2ef-92fbcf53809c.png

四、objdump命令

objdump命令在開發(fā)中也是一個較為常用的命令,且功能強(qiáng)大,用于顯示對象文件中的信息,可以使用該命令來查看共享庫的依賴,方法如下:

objdump-p/path/to/program|grepNEEDED

例如下列命令用于查看/usr/bin/dir的依賴庫:

f5561c8e-4538-11ee-a2ef-92fbcf53809c.png

五、pldd命令

f56d723a-4538-11ee-a2ef-92fbcf53809c.png

六、/proc//maps

通過檢查/proc//maps來獲知運(yùn)行進(jìn)程的庫需求:

awk'/.so/{print$6}'/proc/$(pgrepbash|head-n1)/maps|sort-u

例如:

f59a249c-4538-11ee-a2ef-92fbcf53809c.png

上述語句中pgrep bash | head -n1表示獲取第一個名為bash的進(jìn)程的ID。

七、使用pmap收集程序的共享庫需求

pmap$(pgrepXorg|head-n1)|grep.so|awk'{print$4}'|sort-u

上述語句中pgrep bash | head -n1表示獲取第一個名為bash的進(jìn)程的ID。

八、使用lsof工具檢查正在運(yùn)行的進(jìn)程的共享庫需求

使用方法:

lsof-p$(pgrepbash|head-n1)|grepmem

上述語句中pgrep bash | head -n1表示獲取第一個名為bash的進(jìn)程的ID。

九、總結(jié)

在發(fā)行版的linux系統(tǒng)中,上述命令幾乎都可以使用來查看動態(tài)庫的依賴關(guān)系,在嵌入式linux系統(tǒng)中,可能由于網(wǎng)絡(luò)環(huán)境的限制、運(yùn)行架構(gòu)的不同、構(gòu)建的文件系統(tǒng)中不存在對應(yīng)的命令程序,從而導(dǎo)致上述一些命令無法運(yùn)行或者找不到運(yùn)行的命令,這時候常使用readelf和objdump查看動態(tài)庫的依賴關(guān)系,因為在交叉編譯構(gòu)建工具鏈中一般會包含readelf和objdump命令的變體。






審核編輯:劉清

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

    關(guān)注

    5121

    文章

    19413

    瀏覽量

    312403
  • Linux系統(tǒng)
    +關(guān)注

    關(guān)注

    4

    文章

    601

    瀏覽量

    28105
  • ELF文件
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

    7242
  • Bash
    +關(guān)注

    關(guān)注

    0

    文章

    57

    瀏覽量

    10338

原文標(biāo)題:八種查看linux程序共享庫的方法,了解多少?

文章出處:【微信號:嵌入式小生,微信公眾號:嵌入式小生】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Linux系統(tǒng)下查看elf文件的方法

    作為一個嵌入式開發(fā)人員,交叉編譯是必須進(jìn)行的步驟。那么,如何判斷編譯生成的文件(動態(tài),靜態(tài),可執(zhí)行程序)是否符合目標(biāo)平臺的格式?下面分別介紹這 3 種文件的
    的頭像 發(fā)表于 08-25 16:17 ?3262次閱讀
    <b class='flag-5'>Linux</b>系統(tǒng)下<b class='flag-5'>查看</b>elf文件的方法

    linux共享下,調(diào)用共享庫函數(shù)時,程序卡死在函數(shù)中的pid=fork()這里的原因?

    linux共享下,調(diào)用共享庫函數(shù)時,程序卡死在函數(shù)中的pid=fork()這里,來個大佬指導(dǎo)指導(dǎo)原因...
    發(fā)表于 06-20 06:55

    Linux系統(tǒng)共享編程

    一、說明 類似Windows系統(tǒng)中的動態(tài)鏈接Linux中也有相應(yīng)的共享用以支持代碼的復(fù)用。Windows中為*.dll,而Linux
    發(fā)表于 09-13 16:49 ?24次下載

    Linux下靜態(tài)和動態(tài)共享)的制作與使用

    Linux下靜態(tài)和動態(tài)共享)的制作與使用Linux
    發(fā)表于 07-09 14:39 ?1231次閱讀

    linux靜態(tài)和動態(tài)分析

    的二進(jìn)制是不兼容的。 本文僅限于介紹linux下的。 2.的種類 linux下的有兩種:靜態(tài)
    發(fā)表于 11-02 10:12 ?1次下載

    你知道linux 靜態(tài)共享

    靜態(tài)鏈接和動態(tài)鏈接的區(qū)別在于,主程序在運(yùn)行前,靜態(tài)鏈接的鏈接固定寫入在程序中,而動態(tài)鏈接
    發(fā)表于 04-26 16:46 ?2988次閱讀

    linux共享程序庫剖析

    共享程序庫通過版本號來完成對應(yīng)用程序所使用的程序庫的升級,同時保留了對原有應(yīng)用程序的兼容。本文將討論此方法的實際內(nèi)幕,以及在
    發(fā)表于 04-02 14:35 ?357次閱讀

    Linux下C語言共享的位置無關(guān)實現(xiàn)原理分析

    如何創(chuàng)建一個*可執(zhí)行*的共享 一文談完了如何讓共享可直接執(zhí)行,本文再來談?wù)?b class='flag-5'>共享的運(yùn)行時位置
    的頭像 發(fā)表于 11-28 16:20 ?3177次閱讀

    如何查看linux端口

    有時我們需要知道系統(tǒng)中某個端口的占用情況,以便于解除程序對端口的占用,那么怎么查看Linux系統(tǒng)中的端口情況
    發(fā)表于 05-17 09:45 ?1899次閱讀

    Linux服務(wù)的內(nèi)容如何查看

     ps是進(jìn)程查看命令,netstat是端口查看命令,在Linux系統(tǒng)中,服務(wù)一定是有進(jìn)程的,所以使用ps命令可以查看服務(wù)運(yùn)行情況,另外,Linux
    發(fā)表于 05-20 09:09 ?841次閱讀
    <b class='flag-5'>Linux</b>服務(wù)的內(nèi)容如何<b class='flag-5'>查看</b>

    ldd命令:用于打印程序或者共享文件所依賴的共享列表

    1.命令簡介 ldd 命令用于打印程序或者共享文件所依賴的共享列表。注意,ldd 本身不是一個二進(jìn)制
    的頭像 發(fā)表于 02-02 11:37 ?2225次閱讀

    C++基礎(chǔ)語法知識之鏈接裝載Linux共享

    Linux共享(Shared Library) Linux 下的共享就是普通的 ELF
    的頭像 發(fā)表于 11-01 10:15 ?3034次閱讀

    Linux程序被Killed,查看原因

    Linux程序被Killed,查看原因
    的頭像 發(fā)表于 01-11 10:17 ?2411次閱讀

    Linux中的靜態(tài)共享

    是一個二進(jìn)制文件,包含的代碼可被程序調(diào)用。例如標(biāo)準(zhǔn)C、數(shù)學(xué)、線程等等。有源碼,可下載后
    的頭像 發(fā)表于 05-10 09:34 ?1175次閱讀

    linux查看weblogic進(jìn)程

    Linux操作系統(tǒng)中,WebLogic是一種常用的Java應(yīng)用服務(wù)器,用于部署和管理企業(yè)級Java應(yīng)用程序。為了確保WebLogic服務(wù)器正常運(yùn)行,有時我們需要查看WebLogic進(jìn)程以了解其狀態(tài)
    的頭像 發(fā)表于 12-05 16:07 ?2241次閱讀
    主站蜘蛛池模板: 全部免费特黄特色大片视频 | 美女被免网站在线视频 | 天堂资源在线最新版 | se色成人亚洲综合 | 1024手机看片国产 | 女人精69xxxxxx | 国产在线播放成人免费 | 亚洲人成人网毛片在线播放 | 九九热精品视频在线播放 | 在线免费视频观看 | 日本a级特黄三级三级三级 日本边添边爱边摸边做边爱 | 欧美午夜片 | 免费看日本大片免费 | 国模在线视频 | 成人精品一区二区不卡视频 | 国产高清片 | 手机在线看片福利盒子 | 美女久久久久久 | 哟交小u女国产精品视频 | 在线观看免费视频 | 欧美亚洲专区 | 四虎东方va私人影库在线观看 | 奇米影视亚洲四色8888 | 一区视频| 六月婷婷在线观看 | 国产网红主播精品福利大秀专区 | 狠狠操精品视频 | 男人午夜禁片在线观看 | 亚洲爱婷婷色婷婷五月 | aaaaaa精品视频在线观看 | 簧片免费视频 | 午夜视频在线观看视频 | 日本加勒比官网 | 女人张开腿让男人做爽爽 | 欧美色p | 久久久久久综合 | 一区卡二区卡三区卡视频 | 天堂成人精品视频在线观 | 看全色黄大色大片免费久久 | 天天爽夜夜爽人人爽免费 | 视频色版|