У меня есть приложение на С++, которое унаследовано, которое состоит из:
- Мое главное приложение
- Несколько конкретных приложений (libapp1, libapp2 и т.д.)
- Несколько "сторонних" библиотек (большинство "третьих сторон - это просто другие команды в компании" ), связанные как с основным приложением, так и с библиотеками libappX приложений и с другими библиотеками третьей части. 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) Немного отдельный и менее важный вопрос, как я могу рассказать список всех include файлов, используемых во всем исходном дереве, который я создаю. Опять же, в идеале frm уже созданный исполняемый файл, который у меня есть отладочная версия.
=================
ОБНОВЛЕНИЕ: просто чтобы уточнить, наши библиотеки связаны статически, поэтому ldd
(Список синхронных зависимостей) не работает.
Кроме того, ответ может быть либо для Solaris, либо для Linux - не имеет значения.
Я попытался использовать nm
, но не перечисляет библиотеки