我目前正在研究一個用戶級的ELF文件加載器在C. LD_LIBRARY_PATH
似乎不是我的選擇,因爲它似乎沒有設置默認情況下在我的系統上(x86_64 openSUSE)。獲取存儲庫的所有目錄的最佳方式是什麼?什麼是最好的方式來尋找在Linux下的ELF共享庫在C
回答
/usr/lib64
和/lib64
爲64位二進制或/usr/lib
和/lib
爲32位二進制文件,比從/etc/ld.so.conf
採取的路徑和包括CONFIGS
從man ldconfig
ldconfig
創建必要的鏈接和高速緩存在文件/etc/ld.so.conf
和受信任的目錄/lib
和/usr/lib
(在命令行中指定的目錄中找到的最新共享庫在一些64位體系結構上,如x86-64,/lib
和/usr/lib
是32位庫的可信目錄,而/lib64
和/usr/lib64
用於64位庫)。緩存由運行時鏈接程序ld.so或ld-linux.so使用。
...包含目錄,每行一個,在其中搜索庫的列表
文件/etc/ld.so.conf。
請注意,此信息針對openSUSE,其他發行版可能使用不同的路徑。
其他發行版可以使用不同的目錄來存儲共享庫,但機制是一樣的......這些目錄在'/etc/ld.so.conf'中列出。 –
LD_LIBRARY_PATH
是標準環境變量,用於在用戶無法或無法訪問系統目錄安裝共享庫時添加和加載自己的庫。
有它通常由ldconfig
在啓動時讀取一個文件(它讀取/etc/ld.so.conf
創建一個二進制DBMsomewhat文件/etc/ld.so.cache
,利用哈希表來快速訪問路徑加載庫共享對象時使用,而且所使用的動態加載器(作爲一個內核工具,只有一個這樣的東西,所以它不依賴於你運行的是哪個發行版,而僅僅依賴於你使用的內核版本---它有所改變,但不像內核那樣多---)
要知道哪個sonames(soname是共享對象用於引用接口的通用名稱,這是保證共享對象將需要的接口l條與磁帶庫兼容)正在使用的動態加載器,只需運行
ldconfig -p
,你會得到所有的sonames註冊,並且路徑庫實際加載該SONAME。
如果你想知道哪些圖書館將通過動態加載某些特定的可執行文件被加載,只是執行此:
ldd your_executable
,它將打印sonames該可執行文件的需求並在系統中的他們位於。
ldconfig(8)
做什麼,是搜索人包括在文件/etc/ld.so.conf
共享目標文件的目錄,並期待所有的名字存儲在文件中的soname匹配的,幷包括對命名爲SONAME文件的引用找到。表完成後,/etc/ld.so.cache
文件被創建並由/lib64/ld-linux-x86-64.so.2
使用,該文件是負責用戶模式加載程序使用的其餘共享庫的共享模塊。
有在具有本地$HOME/lib
目錄來存儲你的本地開發的共享庫,沒有問題,但由於該目錄將無法正常納入/etc/ld.so.conf
,你需要創建LD_LIBRARY_PATH=${HOME}/lib
和小心出口嗎,和永遠不要嘗試將其作爲root用戶使用,對於root用戶,env變量被禁用。
編輯1
順便說一句,如果你需要按需加載共享庫(這可能是你所需要的,可能),瞭解dlopen(3)
和朋友的功能,因爲這是最常用的方法在編譯主程序之前動態加載你沒有聽說過的模塊的程序。您需要加載模塊,查找需要的符號(dlsym(3)
或dlfunc(3)
),以存儲模塊給出的引用,最後調用它們。
- 1. 在C#中處理共享dll的最佳方式是什麼?
- 2. 共享庫的ELF頭爲什麼會指定Linux作爲OSABI?
- 3. 什麼是最好的方式來在Linux下采樣週期gpio引腳?
- 4. 什麼是最好的方式來包裝第三方類c#
- 5. 什麼是最好的方式來編寫單元測試從C#的C + +庫?
- 6. C++和Ruby共享公共類的最佳方法是什麼?
- 7. 尋找更好的方式來組織我的圖表在C#
- 8. Lua腳本調用C共享庫的最佳方式是什麼?
- 9. Linux共享庫C++
- 10. 關於Linux上的共享庫有什麼好的做法?
- 11. 通用庫:Nuget與共享的.csproj文件。什麼是最好的方法?
- 12. 尋找缺失共享庫
- 13. 在Objective-C中共享數據對象的最佳方式是什麼?
- 14. 什麼是EMACS中最好的在文件模式下查找?
- 15. 什麼是在表中找到共同行的最佳方式
- 16. 什麼是使用活動之間的共享偏好的最佳方式
- 17. 我尋找最好的方式與PHP
- 18. 什麼是最好的方式來保持主鍵在網格
- 19. 什麼是最好的方式來保存在骨幹集合?
- 20. 什麼是最好的方式來查詢這在貓鼬?
- 21. Eclipse在Linux下尋找eclipse.ini的地方
- 22. 在類之間共享對象的好方法是什麼?
- 23. 什麼是在Linux上的Python視頻捕獲最好的庫?
- 24. linux共享c庫不共享
- 25. 共享類實例(創建和共享單例)的最佳方式是什麼?
- 26. Linux - 找不到共享庫
- 27. 目標C中跨類共享方法的最佳方式是什麼?
- 28. Linux:爲什麼加載程序找到我的共享庫?
- 29. 什麼是共享對象的最安全方式PHP
- 30. 共享/分發Excel宏的最佳方式是什麼?
'man ldconfig'有你需要的所有答案 – myaut
爲什麼你需要一個用戶級的ELF文件加載器?你的問題太短,缺乏動力和背景。請**編輯您的問題**以改善它。 –