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

Linux 查看程序(動態(tài)庫)、進程的依賴庫的方法

這篇具有很好參考價值的文章主要介紹了Linux 查看程序(動態(tài)庫)、進程的依賴庫的方法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

當我們在linux上部署自己開發(fā)的項目程序時,項目代碼與依賴庫完整拷貝過去之后,直接運行我們自己的可執(zhí)行程序,往往提示找不到所相關的.so庫,會報錯。
系統(tǒng)只會去默認搜尋目錄(/lib和/usr/lib)下, 以及動態(tài)庫配置文件(/etc/ld.so.conf和/etc/ld.so.conf.d/*.conf)里所列的目錄下, 搜索可共享的動態(tài)庫(格式如lib*.so*), 進而創(chuàng)建出動態(tài)裝入程序*(ld.so)*所需的連接和緩存文件。因此,需要我們手動將路徑添加進去。

1. 利用ldd查看可執(zhí)行程序(動態(tài)庫)的依賴庫

使用 ldd -r XXX 查詢動態(tài)庫的依賴。關于undefined symbol使用 C++filt 查看

[user@localhost dist]$ ldd /usr/bin/bash
        linux-vdso.so.1 =>  (0x00007ffdbe9e0000)
        libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007fa7da66c000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fa7da468000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fa7da09a000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fa7da896000)

[user@localhost ocr_server]$ ldd libgims.so
        linux-vdso.so.1 =>  (0x00007ffca0de1000)
        libopencv_imgproc.so.405 => /usr/local/lib64/libopencv_imgproc.so.405 (0x00007f6dbb5ce000)
        libopencv_core.so.405 => /usr/local/lib64/libopencv_core.so.405 (0x00007f6dba3df000)
        libopencv_imgcodecs.so.405 => /usr/local/lib64/libopencv_imgcodecs.so.405 (0x00007f6db9e57000)
        libonnxruntime.so.1.11.1 => /home/user/onnxruntime/lib/libonnxruntime.so.1.11.1 (0x00007f6db8fef000)
        libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f6db8ce7000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f6db89e5000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f6db87cf000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f6db8401000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f6db81e5000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f6db7fe1000)
        libpng15.so.15 => /lib64/libpng15.so.15 (0x00007f6db7998000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f6dbd551000)

[wangsp@localhost ocr_server]$ ldd libASL_gcn_label.so  `{部署到生產(chǎn)環(huán)境出現(xiàn)錯誤:not found}`
        linux-vdso.so.1 => not found  
        libopencv_imgproc.so.405 => not found
        libopencv_core.so.405 => not found
        libopencv_imgcodecs.so.405 => not found
        libonnxruntime.so.1.11.1 => not found
        libstdc++.so.6 => /usr/local/lib64/libstdc++.so.6 (0x00007f1013e6a000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f1013b68000)
        libgcc_s.so.1 => /usr/local/lib64/libgcc_s.so.1 (0x00007f1013950000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f1013582000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f1013366000)
        libjpeg.so.62 => /lib64/libjpeg.so.62 (0x00007f1012aef000)
        libpng15.so.15 => /lib64/libpng15.so.15 (0x00007f10128c4000)
        libtiff.so.5 => /lib64/libtiff.so.5 (0x00007f1012650000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f101785f000)
        libjbig.so.2.0 => /lib64/libjbig.so.2.0 (0x00007f1012444000)

方法:

  1. /etc/ld.so.conf.d 目錄下創(chuàng)建 XXX_server.conf 文件,將該軟件依賴的庫路徑添加進去
    echo /home/user/Project/XXX_server/ > /etc/ld.so.conf.d/XXX_server.conf
    執(zhí)行生效
    ldconfig

  2. 或者:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your/custom/path
    或者:echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your/custom/path/' >> ~/.bashrc

2. 利用pldd獲取進程的內存映射信息,進程的依賴共享庫

如下XXX即需要查詢的程序名稱
pldd $(ps -ef | grep XXX| grep -v grep | awk '{print $2}')

[user@localhost laun]$ sudo pldd $(ps -ef | grep XXX | grep -v grep | awk '{print $2}')
3172:   /home/user/laun/dist/XXX/XXX
linux-vdso.so.1
/lib64/libdl.so.2
/home/user/laun/dist/XXX/libz.so.1
/lib64/libpthread.so.0
/lib64/libc.so.6
/lib64/ld-linux-x86-64.so.2
/home/user/laun/dist/XXX/libpython3.6m.so.1.0
/lib64/libutil.so.1
/lib64/libm.so.6
/home/user/laun/dist/XXX/lib-dynload/_struct.cpython-36m-x86_64-linux-gnu.so
/home/user/laun/dist/XXX/lib-dynload/zlib.cpython-36m-x86_64-linux-gnu.so
...
/home/user/laun/dist/XXX/lib-dynload/_json.cpython-36m-x86_64-linux-gnu.so
/home/user/laun/dist/XXX/markupsafe/_speedups.cpython-36m-x86_64-linux-gnu.so
/home/user/laun/dist/XXX/lib-dynload/unicodedata.cpython-36m-x86_64-linux-gnu.so
./XXX/libgims.so
/usr/local/lib64/libopencv_imgproc.so.405
/usr/local/lib64/libopencv_core.so.405
/usr/local/lib64/libopencv_imgcodecs.so.405
/home/user/onnxruntime-linux-x64-1.11.1/lib/libonnxruntime.so.1.11.1
/lib64/libpng15.so.15
./XXX/libgmc.so
./XXX/libgcn_label.so
./XXX/libASL_gcn_label.so
./XXX/libiisis.so
./XXX/libit_dwmp.so
./XXX/libit_dwmp2.so
./XXX/liblgbm.so
/home/user/laun/dist/XXX/gevent/_gevent_c_imap.cpython-36m-x86_64-linux-gnu.so
/home/user/laun/dist/XXX/lib-dynload/_multiprocessing.cpython-36m-x86_64-linux-gnu.so

3. 利用pmap工具查詢未知的可執(zhí)行程序的依賴庫

[user@localhost dist]$ objdump -p /usr/local/php/bin/php |grep NEEDED
  NEEDED               libcrypt.so.1
  NEEDED               librt.so.1
  NEEDED               libmysqlclient.so.18
  NEEDED               libmcrypt.so.4
  NEEDED               libiconv.so.2
  NEEDED               libcurl.so.4
  NEEDED               libm.so.6
  NEEDED               libdl.so.2
  NEEDED               libnsl.so.1
  NEEDED               libxml2.so.2
  NEEDED               libz.so.1
  NEEDED               libssl.so.10
  NEEDED               libcrypto.so.10
  NEEDED               libpthread.so.0
  NEEDED               libc.so.6
  NEEDED               libresolv.so.2

4. 利用pmap查看正在運行時的進程的依賴庫

[user@localhost ~/software/pldd]$ ps -ef|grep php-fpm
root     26534     1  0  2014 ?        00:01:34 php-fpm: master process (/usr/local/php-5.3.29/etc/php-fpm.conf)
nobody   26535 26534  0  2014 ?        00:00:04 php-fpm: pool www          
nobody   26536 26534  0  2014 ?        00:00:05 php-fpm: pool www          
root     30510 30324  0 00:39 pts/0    00:00:00 grep php-fpm


[user@localhost ~/software/pldd]$ pmap 26534 |head 
26534:   php-fpm: master process (/usr/local/php-5.3.29/etc/php-fpm.conf)
0000000000400000  10452K r-x--  /usr/local/php-5.3.29/sbin/php-fpm
0000000001035000     76K rw---  /usr/local/php-5.3.29/sbin/php-fpm
0000000001048000    104K rw---    [ anon ]
0000000002a65000   3448K rw---    [ anon ]
000000311c600000    388K r-x--  /usr/lib64/libssl.so.1.0.1e
000000311c661000   2048K -----  /usr/lib64/libssl.so.1.0.1e
000000311c861000     16K r----  /usr/lib64/libssl.so.1.0.1e
000000311c865000     28K rw---  /usr/lib64/libssl.so.1.0.1e
000000311ce00000     92K r-x--  /lib64/libpthread-2.12.so

5. ln 命令

ln(link 其實link命令的縮寫) 具體使用: ln [選項] 目標文件
選項有如下
-s 使用軟連接
-b 刪除,覆蓋之前建立的鏈接
-d 允許超級用戶制作目錄的硬鏈接
-f 強制執(zhí)行
-i 交互模式,文件存在則提示用戶是否覆蓋
-n 把符號鏈接視為一般目錄
-v 顯示詳細的處理過程

6. version GLIBCXX_3.4.20 not found 錯誤解決

參考:Linux 批量依賴庫拷貝(ldd)
version GLIBCXX_3.4.20 not found 錯誤解決
libstdc++.so.6: version `GLIBCXX_3.4.21‘ not found

7. 使用dlopen加載動態(tài)庫

https://www.cnblogs.com/0xzhang/p/14460925.html
https://www.cnblogs.com/Anker/p/3746802.html文章來源地址http://www.zghlxwxcb.cn/news/detail-784064.html

到了這里,關于Linux 查看程序(動態(tài)庫)、進程的依賴庫的方法的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • linux中查看占用端口的進程方法

    linux中查看占用端口的進程方法

    其中:95115是進程號,mysqld是進程名稱 注意:-tlnp和-ltnp 其中:mysqld是進程名稱,95115是進程id 其中:mysqld是進程,95115是進程id

    2024年04月10日
    瀏覽(31)
  • Linux系統(tǒng)之查看進程監(jiān)聽端口方法

    在Linux系統(tǒng)中,,每個服務啟動的時候都會通過一個端口來進行監(jiān)聽,所有端口都與OS中的進程ID或服務相關聯(lián)。在日常的Linux系統(tǒng)運維中,我們有時需要某些特定服務的進程正在偵聽哪個端口號。 netstat命令 用來打印Linux中網(wǎng)絡系統(tǒng)的狀態(tài)信息,可讓你得知整個Linux系統(tǒng)的網(wǎng)絡

    2024年02月02日
    瀏覽(29)
  • Linux系列之查看進程線程的方法

    Linux系列之查看進程線程的方法

    在window系統(tǒng)查看系統(tǒng)進程,我們一般會使用 Ctrl+Shift+Esc 打開系統(tǒng)進程監(jiān)控頁面,但是在Linux系統(tǒng)查看進程一般使用 top 命令或者 ps 命令,但是如果要查看線程怎么查看?其實也可以使用這兩個命令,所以本博客總結一下幾種方法 ps命令 Linux的ps命令用于查看進程統(tǒng)計信息 常用

    2024年02月07日
    瀏覽(16)
  • Linux 進程異常退出 如何查看日志

    當進程異常退出時,可以通過以下步驟來查看日志: 找到進程的 PID(進程 ID),可以通過 ps 命令來查看: 找到進程的日志文件,一般情況下,進程的日志文件都會被記錄在 /var/log 目錄下,可以使用 ls 命令來查看: 打開日志文件,可以使用 tail 命令來查看日志文件的最后幾

    2024年02月16日
    瀏覽(98)
  • Linux當中如何隱藏和查看進程

    Linux當中如何隱藏和查看進程

    進程是執(zhí)行程序的過程,類似于按照圖紙,真正去蓋房子的過程。 同一個程序可以執(zhí)行多次,每次都可以在內存中開辟獨立的空間來裝載,從而產(chǎn)生多個進程。不同的進程還可以擁有各自獨立的IO接口。操作系統(tǒng)的一個重要功能就是為進程提供方便,比如說為進程分配內存空

    2024年02月15日
    瀏覽(22)
  • linux 如何查看es進程,Linux---關閉Elasticsearch進程,并重新啟動

    查看ES進程: 執(zhí)行命令:ps -ef | grep elasticsearch 如果有elasticsearch進程,則會返回包含elasticsearch的進程信息,如下所示: 如果沒有elasticsearch進程,則不會返回任何信息。 關閉ES進程: 執(zhí)行命令:sudo systemctl stop elasticsearch 等待一段時間,直到ES進程完全停止。 重新啟動

    2024年02月11日
    瀏覽(21)
  • Linux如何查看文件進程占用-lsof

    lsof命令是什么? 可以列出被進程所打開的文件的信息。被打開的文件可以是 1.普通的文件,2.目錄 ?3.網(wǎng)絡文件系統(tǒng)的文件,4.字符設備文件 ?5.(函數(shù))共享庫 ?6.管道,命名管道?7.符號鏈接 8.底層的socket字流,網(wǎng)絡socket,unix域名socket 9.在linux里面,大部分的東西都是被當做文

    2024年02月12日
    瀏覽(12)
  • Linux查看進程端口號的幾種方法

    lsof 是 linux 下的一個非常實用的系統(tǒng)級的監(jiān)控、診斷工具。它的意思是 List Open Files,它可以用來列出被各種進程打開的文件信息,linux 下 “一切皆文件”。 這個命令可能系統(tǒng)里沒有自帶,需要先安裝一下,CentOS系統(tǒng)的話安裝也很簡單,安裝命令:yum install lsof ,然后一路y。

    2023年04月16日
    瀏覽(27)
  • Linux查看進程PID的方法(linux查進程的pid)附帶自動kill 掉

    Linux查看進程PID的方法 Linux作為一款多用戶、多任務的操作系統(tǒng),可以同時處理多個任務,每個任務的執(zhí)行都由進程來實現(xiàn)。在每個進程執(zhí)行的過程中,都會有一個唯一標識符,即稱為PID(Process Identifier)進程ID。Linux系統(tǒng)有很多命令用來查看進程PID,下面介紹幾種常用的查看

    2024年02月01日
    瀏覽(27)
  • Linux下查看進程啟動時間的方法及示例代碼

    在Linux系統(tǒng)中,我們經(jīng)常需要查看進程的啟動時間,以便進行系統(tǒng)性能分析或調試。本文將介紹如何使用命令行工具和示例代碼來準確獲取進程的啟動時間。 方法一:使用ps命令 ps命令是Linux中常用的進程查看工具,它提供了多種選項來獲取進程的信息,包括啟動時間。以下是

    2024年02月05日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包