Как включить только разделы сборки включаемых файлов
Я создал отдельные включаемые файлы для общего использования в моих программах сборки. (например, строковые операции / форматированный ввод / и т.д.). Когда я включаю эти файлы, я замечаю, что все функции включаются в целевой двоичный файл.
Есть ли способ, которым мне удастся включить только используемые функции (например, использовать включаемые файлы в файлах библиотеки C/C++)?
Я использую MASM и нацеливаюсь на x86.
1 ответ
Чтобы извлечь отдельные функции из объектного файла, компоновщик должен знать, где каждая из них начинается и где она заканчивается. Он не может достоверно отличить это от сборки, поэтому вам нужно помочь.
Обычный способ - поместить каждую функцию в отдельный файл и собрать их вот так; таким образом, компоновщик может включать или исключать каждый объектный файл независимо. Это самый простой способ, и он работает с большинством ассемблеров, а не только с MASM, поэтому я бы рекомендовал попробовать его.
Другим способом может быть помещение каждой функции в отдельный сегмент; компоновщик MS может исключать неиспользуемые сегменты, но только если они помечены как так называемые "COMDAT" (общие данные). К сожалению, MASM не поддерживает установку этого атрибута.
Была проделана некоторая работа по добавлению этой информации в файл OBJ в качестве шага постобработки, но, к сожалению, архив с инструментом, похоже, пропал из Интернета:
Связывание функционального уровня с MASM
Дополнительные ссылки:
Как добиться "связывания на уровне функций" с MASM? (включает в себя инструмент для полуавтоматического разделения на несколько файлов).
плоский ассемблер - поддержка COMDAT
В последней ссылке упоминается "Поддержка COMDAT добавлена в jwasm v2.10".