5
我想以編程方式獲得通過我在Linux和Solaris二進制鏈接的共享庫的列表。現在,我掏出來PMAP(我不能在二進制使用ldd
,因爲它不包括dlopen'd庫,我不能用pldd
,因爲它只的Solaris):如何從C++獲取可執行的共享庫列表?
std::ostringstream cmd;
cmd << "/usr/bin/pmap " << getpid() << " | awk '{ print $NF }' | grep '\\.so' | sort -u";
FILE* p = popen(cmd.str().c_str(), "r");
這是一個有點hackish,但它適用於Solaris和Linux(在PMAP輸出稍有不同,但所需的信息總是在最後一欄)。有沒有辦法在不脫殼的情況下獲得相同的信息?這在兩個平臺上都可行?我假設/proc/$PID
文件的格式它們之間的不同,但我不知道在哪裏幫助那些解析頭通常位於(如果有一個共同的位置呢?)。
嚴格來說''dlopen'ed庫不是「鏈接」的,它們在運行時加載。我假設你真的想要所有加載的共享庫列表? –
這是正確的。 –