簡體   English   中英

確定用dlopen打開的動態庫路徑的可移植方法

[英]Portable way to determine path to dynamic library opened with dlopen

我正在尋找一種可移植(POSIX)的方法來確定使用dlopen()打開的庫的路徑。 dl_iterate_phdr()dladdr()類的函數不可移植。

有些man頁詳細的路徑dlopen()找到庫打開( ld.so.cacheLD_LIBRARY_PATH ,/ lib目錄,/ usr / lib目錄,...),所以檢查所有這些目錄可能是可能的,但不便攜式的。 例如,在Linux下,我需要一種解析ld.so.cache的方法,但是在Mac OS X下,沒有這樣的概念。

有關我為什么要執行此操作的詳細信息,請參見上一個問題 ,因為在一般情況下,建議不要使用dlopen

根本沒有任何方法可以隨身攜帶您想要的東西。 確實,在沒有絕對路徑的情況下使用dlopen可能是一個壞主意,並且將其用於除打算用dlopen加載的模塊以外的其他任何東西(由您自己的項目本身或應用程序使用的另一個庫創建並分發)也是一個壞主意。 )。 如果將它與系統庫搜索路徑一起使用,並且系統上的庫“已經存在”,則冒着裝入錯誤版本甚至同名庫的風險。 只要始終向dlopen傳遞絕對路徑,就可以確保確切知道已加載了什么文件(或者更好的是,確切知道要在加載文件之前加載什么文件)。

如果這個答案沒有幫助,也許您可​​以更好地解釋您要達到的目標。

簡單的答案是,沒有答案。 這是Windows優於Unix的地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM