[英]Portable way to determine path to dynamic library opened with dlopen
我正在尋找一種可移植(POSIX)的方法來確定使用dlopen()
打開的庫的路徑。 dl_iterate_phdr()
和dladdr()
類的函數不可移植。
有些man
頁詳細的路徑dlopen()
找到庫打開( ld.so.cache
, LD_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.