2012-04-26 2 views
3

У меня есть два C++-пакета A и B, где A зависит от B. Я хотел бы разбить эту зависимость, если A проглотит минимальную часть кода B, чтобы B можно было выбросить полностью.Слияние двух пакетов C++

Есть ли у кого-нибудь советы, как я мог бы профилировать пакет A, чтобы точно определить классы/функции и т. Д. Мне нужно взять с собой B?

EDIT: Я просто удалил пакет B и прошел (много) циклов компиляции A, скопировал файлы из B, обновил Makefile.am соответственно. Теперь я уверен, что я раздул пакет A с большим количеством материалов, чем это было необходимо. Как я могу найти разделы кода A`, которые никогда не используются в исполняемых/библиотеках, которые выходят из него?

+4

Это может быть немного болезненно, но вы всегда можете просто удалить «B», перекомпилировать и посмотреть, какие сообщения об ошибках вы получите :) Затем просто восстановите то, что вам действительно нужно, от источника управления. Как только вы это сделаете, в качестве второго шага вы можете перенести то, что вы сохранили, на 'A'. –

+0

Я делаю именно это. И да, действительно больно. Я вытащил первый слой с отсутствующими файлами и перекомпилировал, что дало мне то, от чего зависели. Некоторые из файлов второго уровня могут быть удалены, если я вырезал половину файла первого уровня, который мне действительно не нужен. – ajwood

ответ

0

Возможно, objdump предоставит вам полезную информацию. Используйте его в двоичном (objdump -t), и он должен иметь возможность отображать некоторую полезную информацию о импортируемых функциях.

1

Я думаю, что есть три возможных способа действий:

  1. Действительно импортировать только то, что нужно: Undo, что вы сделали, и сделать это снова, но на этот раз не копировать файлы целиком из B, а просто единственные функции, которые компилятор говорит вам, отсутствуют.

  2. В вашей текущей ситуации, пусть какой-нибудь инструмент проанализирует код для вас (см. Looking for a free source code analyzer (Function depedency tree) и Looking for a free source code analyzer (Function depedency tree)), или напишите расширенный код, используя все A и выполните анализ покрытия кода.

  3. Прокомментируйте функции в источниках, которые вы скопировали из B (не в заголовках). Теперь ваш компоновщик будет жаловаться на любую недостающую функцию. Раскомментируйте их, удалите остальные, включая их объявления в заголовках. Это обратный подход к первому.
Смежные вопросы