亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

庫部署與未使用的直接依賴關系

庫部署與未使用的直接依賴關系

慕少森 2021-04-05 21:18:13
我試圖找出Qt Assistant需要部署哪些庫。我ldd在Linux上使用過此功能。我發現ldd提供了-u“打印未使用的依賴項”的選項。聽起來好像有某種依賴(部署)并不需要(總是)。所以我又運行了兩個ldd命令:~$ ldd -u ~/Qt/5.10.0/gcc_64/bin/assistant Unused direct dependencies:        /lib/x86_64-linux-gnu/libQt5Network.so.5        /lib/x86_64-linux-gnu/libQt5Sql.so.5        /lib/x86_64-linux-gnu/mesa/libGL.so.1        /lib/x86_64-linux-gnu/libpthread.so.0        /lib/x86_64-linux-gnu/libm.so.6        /lib/x86_64-linux-gnu/libgcc_s.so.1~$ ldd -r -u ~/Qt/5.10.0/gcc_64/bin/assistant Unused direct dependencies:        /lib/x86_64-linux-gnu/libQt5Network.so.5        /lib/x86_64-linux-gnu/mesa/libGL.so.1        /lib/x86_64-linux-gnu/libpthread.so.0        /lib/x86_64-linux-gnu/libm.so.6        /lib/x86_64-linux-gnu/libgcc_s.so.1我試圖找出正在發生的事情,但我并不完全了解。我的問題是:什么是未使用的直接依賴項(這對我來說是矛盾的)?是否有可能找出Qt Assistant實際上是否需要未使用的直接依賴項(然后再啟動它并等待錯誤)?上面的命令行之間到底有什么區別?為什么第一個列表不包含第二個列表libQt5Sql?
查看完整描述

1 回答

?
米脂

TA貢獻1836條經驗 獲得超3個贊

由于-u開關,它正在打印。在ldd的手冊頁中


-u, --unused

? ? ? ? ? Print unused direct dependencies.? (Since glibc 2.3.4.)

什么是未使用的直接依賴項(這對我來說是矛盾的)?


這是恕我直言->庫您建立二進制文件,這是沒有必要的。IE


gcc -L<LD_PATH> -Wall -o assistant assistant.c -lA -lB -lC

它將所有ABC列為依賴項,但它們可能實際上未以二進制形式使用。主要原因是Makefile中通用LDFLAGS。


是否可以找出Qt Assistant是否確實需要未使用的直接依賴項(然后再啟動它并等待錯誤)?


不,我認為,只有在調用特定函數時才可以使用它。還有機會您可以使用此功能,不會看到錯誤。不過,如果您決定這樣做。有一種瘋狂的方式。列出所有調用的函數,然后檢查需要哪些所有庫。(不確定這一點,但我認為基于類似的邏輯ldd可以打印此內容。)根據手冊頁ldd可能運行二進制文件。因此,基本上可以說是您提到的一種情況。但不廣泛。


?Be aware,? however,? that? in some circumstances, some versions of

?ldd may attempt to obtain the dependency information by directly?

?executing? the program.? Thus, you should never employ ldd on an

?untrusted executable,

?since this may result in the execution? of? arbitrary? code.

上面的命令行之間到底有什么區別?為什么第一個列出libQt5Sql但第二個沒有列出?


差異是 -r


? ? ? ?-r, --function-relocs

? ? ? ? ? Perform relocations for both data? objects? and? functions,? and

? ? ? ? ? report any missing objects or functions (ELF only).

簡而言之,它處理加載的庫函數。建議使用ldd -u -r在這個錯誤在RedHat。


查看完整回答
反對 回復 2021-04-16
  • 1 回答
  • 0 關注
  • 321 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號