Mam aplikacji C++, który odziedziczyłem, który składa się z:Czy mogę uzyskać raport WSZYSTKICH bibliotek połączonych podczas budowania mojego pliku wykonywalnego C++ (gcc)? (W tym powiązane statycznie)
- Moim głównym aplikacji
- kilku bibliotek specyficznych dla aplikacji (libapp1, libapp2, etc ...)
- Kilka bibliotek "trzecich" (większość "trzecia strona to po prostu inne zespoły w firmie") połączonych zarówno z głównej aplikacji, z bibliotek libappX specyficznych dla aplikacji, jak iz innych bibliotek trzeciej części - np. libext1, libext2, etc ...
Innymi słowy, mój kod wygląda następująco:
// 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>
pytania:
1) Jak mogę sprawdzić, które zostały połączone biblioteki do końcowego pliku wykonywalnego? musi ona obejmować statycznie połączone te
Innymi słowy, chcę odpowiedzieć na „App1, App2, EXT1, ext2, ext3, ext4”
Idealnie, odpowiedź byłaby dostępna od samego pliku wykonywalnego (Mam wbudowaną wersję debugowania, na wypadek gdyby było to bardziej możliwe). Jeśli to niemożliwe, chciałbym wiedzieć, czy istnieje proste narzędzie do analizy kodu (iedeally coś w samym gcc), aby zapewnić tę analizę.
Należy pamiętać, że pliki obiektów dla bibliotek zewnętrznych są już zbudowane, więc patrząc na dzienniki kompilacji, aby zobaczyć, co było połączone, obawiam się, że "ext4" nie pojawi się w dzienniku, ponieważ nie będziemy buduj bibliotekę "ext3", która jest już gotowa.
UWAGA: uruchomienie "nmake" z DEPS ustawionym na yes, aby odbudować wszystkie, NIE jest opcją. Ale mam dostęp do pełnego kodu źródłowego dla bibliotek zewnętrznych.
2) Nieco oddzielne i mniej ważne pytanie, w jaki sposób mogę powiedzieć listę wszystkich w plikach używanych w całym drzewie źródłowym, które buduję. Znowu, najlepiej już skompilowany plik wykonywalny frm, który mam wersję debugowania.
=================
UPDATE: Właśnie w celu wyjaśnienia, nasze biblioteki są połączone statycznie, więc ldd
(Lista Synamic Zależności) nie działa.
Odpowiedź też może dotyczyć systemu Solaris lub Linux - nie ma znaczenia.
Próbowałem za pomocą nm
ale nie listy bibliotek
Jakiej platformy używasz? – Tom
@Tom - w systemie Solaris lub Linux. Nie obchodzi mnie, czy odpowiedź jest ogólna dla obu, czy tylko na jednej. – DVK
Proponuję ldd następnie na pierwsze pytanie – Tom