У меня есть унаследованное от меня приложение C ++, которое состоит из:
- Моего основного приложения
- Несколько библиотек для приложений (libapp1, libapp2 и т. Д.)
- Несколько «сторонних» библиотек (большинство «третьих лиц - это просто другие команды в компании»), связанных как из основного приложения, из библиотек libappX для конкретного приложения, так и из других библиотек 3-й части - например, libext1,libext2 и т.д ...
Другими словами, мой код выглядит следующим образом:
// 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>
ВОПРОСЫ:
1)Как я могу сказать, какие библиотеки были связаны с конечным исполняемым файлом? Сюда должны входить статически связанные
Другими словами, я хочу получить ответ "app1, app2, ext1, ext2, ext3, ext4"
В идеале, ответбудет доступен из самого исполняемого файла (у меня есть встроенная отладочная версия на случай, если это сделает это более возможным).Если это невозможно, я хотел бы знать, есть ли простой инструмент анализа кода (то есть что-то внутри самого gcc), чтобы обеспечить этот анализ.
Обратите внимание, что объектные файлы для внешних библиотек уже созданы, поэтому ищитев журналах сборки, чтобы увидеть, что было связано, я беспокоюсь, что ext4 не будет отображаться в журнале, так как мы не будем собирать уже созданную библиотеку ext3.
ПРИМЕЧАНИЕ: запуск "nmake" с DEPS, установленным в yes, чтобы восстановить все, НЕ является опцией.Но у меня действительно есть доступ к полному исходному коду для внешних библиотек.
2) Несколько отдельный и менее важный вопрос, как я могу сказать список всех включаемых файлов , используемых ввсе исходное дерево я строю.Опять же, в идеале из уже созданного исполняемого файла, который у меня есть отладочная версия.
=================
ОБНОВЛЕНИЕ: Просто для пояснения, наши библиотеки связаны статически, поэтому ldd
(список динамических зависимостей) не работает.
Кроме того, ответ может быть либо для Solaris, либо для Linux - не имеет значения.
Я пытался использовать nm
, но в нем нет библиотек