que tienen una aplicación C++ que he heredado, que consiste en:¿Puedo obtener un informe de TODAS las bibliotecas vinculadas al compilar mi ejecutable de C++ (gcc)? (Incluyendo enlazado estáticamente)
- Mi principal de aplicaciones
- Varias bibliotecas específicas de la aplicación (libapp1, libapp2, etc ...)
- Varias bibliotecas "de terceros" (la mayoría de las "terceras partes son solo otros equipos de la empresa") vinculadas desde la aplicación principal, desde las bibliotecas libappX específicas de la aplicación y desde otras bibliotecas de terceros: por ej. libext1, libext2, etc ...
En otras palabras, mi código es el siguiente:
// main.C
#include <app1/a1l1.H>
#include <app2/a2l1.H>
#include <ext1/e1l1.H>
// app1/a1l1.H
#include <app1/a1l2.H>
#include <ext2/e2l1.H>
// app2/a2l1.H
#include <ext2/e2l2.H>
// ext1/e1l1.H
#include <ext3/e3l1.H>
// ext3/e3l1.H
#include <ext4/e4l1.H>
preguntas:
1) ¿Cómo puedo saber qué bibliotecas se han relacionado en el ejecutable final? Esto debe incluir enlazados estáticamente los
En otras palabras, quiero una respuesta de "app1, app2, ext1, ext2, ext3, ext4"
Idealmente, la respuesta estaría disponible desde el propio ejecutable (Tengo una versión de depuración construida en caso de que lo haga más posible). Si eso es imposible, me gustaría saber si hay una herramienta simple de análisis de código (es decir, algo dentro de gcc) para proporcionar ese análisis.
Tenga en cuenta que los archivos de objeto para bibliotecas externas ya están construidos, así que mirando los registros de compilación para ver lo que estaba vinculado, me preocupa que "ext4" no aparezca en el registro ya que no lo haremos construyendo una biblioteca "ext3" que ya está preconstruida.
NOTA: ejecutar "nmake" con DEPS establecido en yes para reconstruir todo NO es una opción. Pero SI TENGO acceso al código fuente completo para bibliotecas externas.
2) Una pregunta ligeramente separada y menos importante, ¿cómo puedo decir una lista de todos los incluir archivos utilizados en todo el árbol fuente que estoy construyendo. Nuevamente, idealmente frm ya ejecutado ejecutable, que tengo una versión de depuración de.
=================
ACTUALIZACIÓN: Solo para aclarar, nuestras bibliotecas están vinculadas de forma estática, por lo ldd
(Lista Synamic Dependencias) no funciona.
Además, la respuesta puede ser para Solaris o Linux, no importa.
He intentado utilizar nm
pero eso no enumera las bibliotecas
¿Qué plataforma estás usando? – Tom
@Tom, ya sea Solaris o Linux. No me importa si la respuesta es genérica para ambos o solo funciona en uno. – DVK
Sugeriría ldd para su primera pregunta – Tom