我正在尋找一種便攜式(POSIX)的方式來確定打開一個庫的路徑dlopen()
。諸如dl_iterate_phdr()
和dladdr()
之類的功能是不便攜的。便攜式的方式來確定路徑動態庫打開與dlopen
一些man
頁詳細dlopen()
所採取的路徑找到庫打開(ld.so.cache
,LD_LIBRARY_PATH
,/ lib目錄,/ usr/lib目錄,...),所以檢查所有這些目錄的可能是可能的,但不便攜。例如,在Linux下,我需要一種方法來解析ld.so.cache
,但在Mac OS X下,沒有這種概念。
請參閱爲什麼我想這樣做對細節previous question,因爲使用dlopen
是在一般情況下是不明智的。
聽起來絕對路徑是要走的路,但必須確保絕對路徑是正確的,因爲'dlopen'會在其他搜索路徑下開始。請參閱http://stackoverflow.com/questions/9038303/programatically-determine-shared-libraries-in-use-by-running-application關於我想完成的明確細節。 – greg 2012-02-06 16:31:42
好的,'LD_LIBRARY_PATH'不適合你在那裏做什麼。相反,您應該將學生的共享庫文件的完整路徑名傳遞給您的程序,然後它可以使用完整路徑名加載它。 – 2012-02-06 16:33:51
@greg:如果給定的名稱不包含「/」字符,則dlopen僅搜索庫路徑。如果它包含「/」,則將其視爲文件路徑(直接傳遞給打開的文件),如果該文件未退出,則不會在其他任何位置查看。 – 2012-02-06 17:33:28