Me gustaría obtener programáticamente una lista de las bibliotecas compartidas vinculadas por mi binario en Linux y Solaris. En este momento un shell de pmap (no puedo usar ldd
en el binario, ya que no incluirá bibliotecas dlopen'd, y no puedo usar pldd
porque sólo Solaris):¿Cómo obtener la lista de bibliotecas compartidas ejecutables desde C++?
std::ostringstream cmd;
cmd << "/usr/bin/pmap " << getpid() << " | awk '{ print $NF }' | grep '\\.so' | sort -u";
FILE* p = popen(cmd.str().c_str(), "r");
Esto es un poco hackish pero funciona tanto en Solaris como en Linux (la salida de pmap es ligeramente diferente pero la información deseada siempre está en la última columna). ¿Hay alguna manera de obtener la misma información sin desembolsar? Eso funciona en ambas plataformas? Supongo que los archivos /proc/$PID
están formateados de forma diferente entre ellos, pero no sé dónde se ubican generalmente los encabezados para ayudar a analizar aquellos (si hay una ubicación común en absoluto).
Estrictamente hablando, las bibliotecas 'dlopen'ed no están" vinculadas ", sino que se cargan en tiempo de ejecución. Supongo que realmente quiere una lista de todas las bibliotecas compartidas cargadas. –
Eso es correcto. –