После устранения ошибок и получения объектного модуля можно приступать к следующему этапу — созданию исполняемого (загрузочного) модуля, или, как еще называют этот процесс, к компоновке программы. Главная цель этого этапа - преобразовать код и данные в объектных файлах в их перемещаемое выполняемое отображение. Чтобы понять, в чем здесь суть, нужно разобраться, зачем вообще разделяют процесс создания исполняемого модуля на два этапа — трансляцию и компоновку. Это сделано намеренно, чтобы можно было объединять вместе модули, написанные на одном и том же или на разных языках. Формат объектного файла позволяет при определенных условиях объединить несколько отдельно отранслированных исходных модулей в один модуль. При этом в функции компоновщика входит разрешение внешних ссылок (ссылок на внешние процедуры и переменные) в этих модулях. Результатом работы компоновщика является создание загрузочного файла с расширением.ехе. После этого операционная система может загрузить такой файл в память и выполнить его.
Полный формат командной строки для запуска компоновщика довольно сложен (в этой и в большинстве следующих глав мы в основном будем использовать упрощенный формат):
TLINK[ключи] список_объектных_файлов [,имя_загрузочного_модуля]
[,имя_файла_карты][,имя_файла_библиотеки] [,имя_файла_определений],имя_ресурного_файла)
Параметры командной строки для запуска компоновщика перечислены далее.
- ключи — необязательные параметры, управляющие работой компоновщика. Список наиболее часто используемых ключей приведен в приложении В (h|Hwww.piter.com/doWnload). Каждому ключу должен предшествовать символ- (дефис) или / (слеш). При задании имен ключей имеет значение регистр символов.
- список_объектных_файлов — обязательный параметр, содержащий список компонуемых файлов с расширением.obj. Файлы должны быть разделены пробелами или знаком + (плюс), например:
tlink /v prog + mdf + fdr
При необходимости имена файлов снабжают указанием пути к ним.
- имя_загрузочного_модуля — необязательный параметр, обозначающий имя формируемого загрузочного модуля. Если оно не указано, то имя загрузочного модуля будет совпадать с первым именем в списке имен объектных файлов.
- имя_файла_карты — необязательный параметр, наличие которого обязывает ком- поновщик создать специальный файл с картой загрузки. В ней перечисляются имена, адреса загрузки и размеры всех сегментов, входящих в программу.
- имя_файла_библиотеки — необязательный параметр, который представляет собой путь к файлу библиотеки (.lib). Этот файл создается и обслуживается специальной утилитой tlib.exe пакета TASM. Утилита позволяет объединить часто используемые подпрограммы в виде объектных модулей в один файл. В дальнейшем можно просто указывать в командной строке tlink.exe имена нужных для компоновки объектных модулей и файл библиотеки, в котором следует искать эти подпрограммы. Если компонуется Windows-приложение, то на месте параметра имя_файла_библиотеки должно указываться имя библиотеки импорта (глава 16).
- имя_файла_определений - необязательный параметр, который представляет собой путь к файлу определений (.def). Этот файл используется при компоновкеWindows-приложений (глава 16).
- имя_ресурсного_файла — необязательный параметр, который представляет собой путь к файлу с ресурсами Windows-приложения (.res). Этот файл используется при компоновке Windows-приложений (глава 16).
Рассмотренный нами формат командной строки используется и для 32-разрядного варианта компоновщика tlink32.exe.
Существует возможность задания параметров командной строки компоновщика в текстовом файле. Для этого нужно создать файл с именем tlink.cfg (tlink32.cfg). При вызове компоновщика tlink.exe с параметром tlihk.cfg (ttink32.exetlirik32.cfg) ему будет передано содержимое файла tlink.cfg (tlink32.cfg). Например, текст конфигурационного файла tlink32.cfg для создания исполняемого файла Wmdows-приложения с отладочной информацией должен выглядеть так:
/v '
/Twe
Так же как и в случае команды tasm.exe, совсем не обязательно запоминать подробно синтаксис команды tlink.exe. Для того чтобы получить список ключей программы tlink.exe, достаточно просто запустить ее без параметров.
Для выполнения нашего примера запустим программу tlink.exe командной строкой вида
tlink.exe /v prg_6_l.obj.
В результате вы получите исполняемый модуль с расширением.ехе — рrg_6_1.ехе.
Получив исполняемый модуль, не спешите радоваться. К сожалению, устранение синтаксических ошибок еще не гарантирует, что программа будет хотя бы запускаться, не говоря уже о ее правильной pa6oтe. Поэтому обязательным этапом процесса разработки является отладка?