Linux

Linux Prog 有 24 個 Libs Fails LDD,strace 在 prog 庫讀取期間顯示 692“1 ENOENT”

  • March 30, 2019

我正在就程序初始化的預期和期望結果徵求意見,特別是為我沒有原始碼的程序載入共享庫。通過 RPM 傳遞的所有程式碼。

  • 可疑 prog 在兩個 TCP 連接上表現出恆定的 Revc-Q 緩衝。TCP conns 的另一端看起來不錯。可疑的 prog 緩衝區幾乎不斷地緩衝 1000-10000 字節,很少變為零。可疑 prog 的主機顯示 tcpActiveOpens.0 50,000 和 tcpAttemptFails.0 為 47,000,兩者都在不斷增加。許多其他可能的 TCP 問題。
  • 當 ldd 在可疑 prog 上執行時,總共返回 42 個庫,其中 24 個“未找到”,其他 18 個使用 DIR 和 hexaddr 解析。在可疑的 prog 周圍放置一個 strace 包裝器,並在每個庫上註明許多“-1 ENOENT”,而不僅僅是用 ldd 註明“未找到”的那些。最終找到所有庫並將其載入到可疑的 progs mem 中。有些人在成功之前有多達 42 個 ENOENT。
  • 與開發人員聯繫並提供了調查結果,並得到保證,當我執行 ldd 時,我需要獲取他們的環境配置文件,該文件應該在 prog 啟動時執行並設置所有庫路徑。對 ENOENT 不予置評。

問題:當你完成程式碼並編譯後,你是否使用 ldd 等工具進行驗證?ldd 是否應該總是返回 0,或者是一些或很多“未找到”並不總是一個問題。那麼ENOENTs呢?在我看來,如果程式碼編譯並正確執行,應該是零錯誤。

ldd應始終返回 OK,否則程序無法執行。另一方面,有一些方法可以控制動態連結器在哪裡搜尋共享庫。根據你從程序供應商那裡得到的回复,我假設他們已經提供了某種啟動腳本,用於設置程序環境,以便滿足搜尋路徑。如果您不按預期執行程序,ldd很可能會報告錯誤。

ENOENT當庫搜尋路徑包含多個目錄時,這些錯誤是完全正常的。動態連結器嘗試通過打開請求的文件來查找它要查找的內容,如果找不到(“沒有這樣的文件或目錄”),它會繼續搜尋路徑中的下一個目錄。這不僅適用於共享庫,也適用於其他類型的文件。例如,如果配置文件是可選的,程序將忽略錯誤消息並繼續執行。

附言。我發現你提問的報紙交友廣告風格很有趣。

引用自:https://unix.stackexchange.com/questions/509567