Как включить только разделы сборки включаемых файлов

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

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

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

1 ответ

Решение

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

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

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

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

Связывание функционального уровня с MASM

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

Как добиться "связывания на уровне функций" с MASM? (включает в себя инструмент для полуавтоматического разделения на несколько файлов).

плоский ассемблер - поддержка COMDAT

Форумы MSDN - Comdat

JWASM: поддержка COFF COMDAT

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

Другие вопросы по тегам