Vorrei ottenere a livello di programmazione un elenco delle librerie condivise collegate dal mio binario su Linux e Solaris. In questo momento mi sborsare per pmap (non posso usare ldd
sul binario perché non includerà librerie dlopen'd, e non posso usare pldd
perché è solo Solaris):Come ottenere l'elenco delle librerie condivise eseguibili da C++?
std::ostringstream cmd;
cmd << "/usr/bin/pmap " << getpid() << " | awk '{ print $NF }' | grep '\\.so' | sort -u";
FILE* p = popen(cmd.str().c_str(), "r");
Questo è un po 'hacker ma funziona sia su Solaris che su Linux (l'output pmap è leggermente diverso ma le informazioni desiderate sono sempre nell'ultima colonna). C'è un modo per ottenere le stesse informazioni senza sborsare? Funziona su entrambe le piattaforme? Presumo che i file /proc/$PID
siano formattati in modo diverso tra di loro, ma non so dove si trovano le intestazioni per aiutare ad analizzare quelli che di solito si trovano (se c'è una posizione comune?).
Strettamente parlando, le librerie 'dlopen'ed non sono" collegate ", sono caricate in fase di runtime. Presumo che tu voglia veramente una lista di tutte le librerie condivise caricate? –
Questo è corretto. –