1
A
回答
0
我怎樣才能最容易地看到所需共享庫的加載順序?
使用LD_DEBUG:
LD_DEBUG=files /bin/ls
13444:
13444: file=libc.so.6 [0]; needed by who [0]
...
13444: file=libnss_files.so.2 [0]; needed by who [0]
...
欲瞭解更多信息的人ld.so.
它們是按照它們按readelf -d列出的順序加載的嗎?
不一定例如它會受到預加載的影響(LD_PRELOAD
,/etc/ld.so.preload
)。
3
使用LD_DEBUG=files
可讓您查看庫以何種順序搜索,其中包括和,它們的初始化順序如下。後者可能與前者不同。
他們是在他們列出的順序裝載到由
readelf -d
取決於你的意思是「裝」什麼。一旦初始化程序返回,庫就會「完全加載」。
根據該定義,否:在readelf -d
中列出的NEEDED
依賴項的順序和加載順序不相同。
考慮a.out
取決於libA.so
和libB.so
:
readelf -d a.out | grep NEEDED
0x0000000000000001 (NEEDED) Shared library: [libA.so]
0x0000000000000001 (NEEDED) Shared library: [libB.so]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
並進一步libA.so
本身取決於libC.so
和libD.so
:
readelf -d libA.so | grep NEEDED
0x0000000000000001 (NEEDED) Shared library: [libC.so]
0x0000000000000001 (NEEDED) Shared library: [libD.so]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
在庫的搜索順序:
LD_DEBUG=files ./a.out |& grep 'needed by'
49169: file=libA.so [0]; needed by ./a.out [0]
49169: file=libB.so [0]; needed by ./a.out [0]
49169: file=libc.so.6 [0]; needed by ./a.out [0]
49169: file=libC.so [0]; needed by ./libA.so [0]
49169: file=libD.so [0]; needed by ./libA.so [0]
在圖書館 「滿載」 的順序:
LD_DEBUG=files ./a.out |& grep 'calling init'
69038: calling init: /lib/x86_64-linux-gnu/libc.so.6
69038: calling init: ./libD.so
69038: calling init: ./libC.so
69038: calling init: ./libB.so
69038: calling init: ./libA.so
,可能會影響加載順序的其他因素:
LD_PRELOAD
或/etc/ld.so.preload
。- 任何庫都可以在其初始化程序中執行
dlopen
。
相關問題
- 1. 加載共享庫
- 2. 如何調試加載共享庫
- 3. 共享庫文件加載
- 4. 錯誤加載共享庫
- 5. 誤加載JNI共享庫
- 6. gdb7.7不加載共享庫
- 7. 加載多個共享庫
- 8. 如何查找OSX上的進程加載哪個共享庫?
- 9. 從Linux/Android上的另一個共享庫檢查加載的共享庫
- 10. 如何查看頁面中加載的js腳本的順序
- 11. 加載使用其他共享庫的共享庫
- 12. 加載共享依賴於其他共享庫庫
- 13. 如何檢查共享庫已成功加載或未使用dlopen加載?
- 14. 如何查看共享運行隊列
- 15. 如何查看Linux共享庫導出的函數列表?
- 16. 加載共享庫的兩個實例
- 17. 加載共享庫的多個副本
- 18. 如何更改共享庫搜索順序?
- 19. 是否可以在共享內存中加載共享庫?
- 20. Laravel 5查看::共享
- 21. 加載器引用共享庫中的變量是如何的?
- 22. 加載共享庫時出錯
- 23. Android UnsatisfiedLinkError:問題加載共享庫
- 24. 加載共享庫時出錯
- 25. eclipse未能加載jne共享庫
- 26. 加載SMFL共享庫時出錯
- 27. Java未能加載JNI共享庫
- 28. 動態加載Linux共享庫?
- 29. 動態共享庫加載框架
- 30. 加載共享類庫時出錯
謝謝你的詳細解答。尤其是,知道初始化順序不一定與庫加載順序相同對於我(可能對未來其他人)很有用。 –
對於上下文,我問這個問題的原因是我們對庫初始化程序有一個排序條件,但它們沒有設置優先級。我想在確定解決問題之前確定我已經理解了這個問題。 –