2013-03-14 2 views
1

Я создал отдельные файлы include для общего использования в моих программах сборки. (например, строковые операции/форматированный ввод/и т. д.) Когда я включаю эти файлы, я замечаю, что все функции входят в целевой бинарный файл.Как включить только разделы сборки включают файлы

Есть ли способ, которым я могу включить только используемые функции (например, использовать файлы include в файлах библиотеки C/C++)?

Я использую MASM и настраиваю x86.

+1

MASM не поддерживает связь на уровне функций, поэтому нет простого способа сделать это, насколько мне известно. Вы можете добавить множество определений, которые определяют, какие части кода компилируются, или разделять код общего назначения на несколько файлов сборок, которые вы собираете в отдельные объектные файлы. – Michael

+0

В 'Makefile' вы можете скопировать каждый входной файл в другое имя и затем отфильтровать эти копии с некоторым регулярным выражением [s] (чтение данных о функциях, используемых непосредственно из источника, например, с awk или Perl) на основе функций, которые вы хотите получить включенное на этот раз и включить эти копии, отфильтрованные повторно, а не полные оригинальные. – nrz

ответ

2

Чтобы извлечь отдельные функции из объектного файла, компоновщик должен знать, где начинается каждый и где он заканчивается. Он не может надежно сказать это со стороны сборки, поэтому вам нужно помочь.

Обычный способ заключается в том, чтобы поместить каждую функцию в отдельный файл и собрать их таким образом; таким образом, компоновщик может включать или исключать каждый объектный файл независимо. Это самый простой способ и работает с большинством ассемблеров, а не только с MASM, поэтому я бы рекомендовал попробовать его.

Другим способом может быть включение каждой функции в отдельный сегмент; MS-линкер может исключать неиспользуемые сегменты, но только, если они отмечены как так называемые «COMDAT» (общие данные). К сожалению, MASM не поддерживает установку этого атрибута.

Там были некоторые работы по добавлению этой информации в файл OBJ как шаг постобработки, но, к сожалению, архив с инструментом, кажется, ушел из Интернета:

Function level linking with MASM

Дополнительные ссылки :

How to achieve "function level linking" with MASM? (включает инструмент для полуавтоматического разбиения на несколько файлов).

flat assembler - COMDAT support

MSDN forums - Comdat

JWASM: Support for COFF COMDATs

Последнее звено упоминает "Поддержка COMDAT добавляется в jwasm v2.10."

+0

Я попробую. благодаря – Haunted

Смежные вопросы