|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Компоновщик ресурсов RLINKRLINK комбинирует файл .RES с файлом .EXE для создания нового выполняемого файла Windows. На входе RLINK задаются один или несколько объектных файлов, а на выходе создается один выполняемый файл Windows. RLINK компонует ресурсы, корректируя строковые таблицы и таблицы сообщений и связывая эти скомпонованные ресурсы с выполняемым файлом. Командная строка имеет следующий синтаксис:
Командный процессор ресурсов: BRC.EXEBorland Resource Compiler (BRC) - это оболочка компилятора ресурсов. В зависимости от синтаксиса командной строки, она вызывает BRCC или RLINK, либо оба этих продукта. Командная строка BRC имеет следующий синтаксис:
brc [параметры] <имя_файла>.RC [<имя_файла>.EXE]
Параметры перечислены в следующей таблице:
Использование библиотекДанный раздел описывает несколько инструментальных средств, которые позволяют вам работать с библиотечными файлами. Вы можете использовать эти инструментальные средства в IDE или в командной строке.
Утилита IMPLIB: библиотекарь импортаУтилита IMPLIB создает библиотеку импорта, которая может замещать часть или всю секции IMPORTS файла определения модуля для прикладной программы Windows. IDE использует IMPLIB как транслятор для целевого файла DLL. Когда вы добавляете DLL в качестве цели, администратор проектов компилирует и компонует те файлы, от которых зависит DLL, а затем запускает IMPLIB для создания файла .LIB. Вы можете также запустить IMPLIB из IDE. Библиотеки импорта содержат записи. Каждая запись содержит имя DLL и определяет, где в DLL находятся импортируемые функции. Эти записи связываются с приложением с помощью компоновщика и обеспечивают для Windows информацию, нужную для выполнения вызова функций. Библиотека импорта может указываться в секции IMPORTS файла определения модуля. Если вы создали приложение Windows, то уже использовали по крайней мере одну библиотеку импорта, IMPORT.LIB, библиотеку для стандартных DLL Windows (она компонуется автоматически). Библиотека импорта перечисляет некоторые или все экспортируемые функции для одной или нескольких DLL. Чтобы создать библиотеку импорта для DLL, наберите:
IMPLIB параметры имя_библиотеки [файлы_определ... DLL...]
где "параметры" - это необязательный список из одного или более параметров IMPLIB, "имя_библиотеки" - это имя новой библиотеки импорта, "файлы_определ" - это список из одного или более файлов определения модуля для одной или более DLL, а DLL - список существующих DLL. Требуется задать по крайней мере одну DLL или файл определения модуля.
Утилита IMPDEF: администратор файлов определения модуляУтилита IMPDEF используется с IMPLIB для того, чтобы дать возможность настроить библиотеку импорта для необходимой комплектации заданной прикладной программы. Библиотека импорта используется для предоставления доступа к функциям DLL. Синтаксис вызова утилиты IMPDEF:
IMPDEF имя_приемника.DEF имя_источника.DLL
При этом из файла "имя_источника.DLL" создается файл определения модуля с именем "имя_приемника.DEF". Файл определения модуля будет выглядеть следующим образом:
LIBRARY имя_файла
DESCRIPTION 'Описание'
EXPORTS
имя_экспортируемой_функции @номер
...
имя_экспортируемой_функции @номер
где "имя_файла" является именем корневого файла DLL, 'Описание' является значением утверждения DESCRIPTON, если DLL была предварительно скомпонована с файлом определения модуля, который включает утверждение DESCRIPTION, "имя_экспортируемой_функции" являются именами экспортных функций, а "номера" являются порядковыми значениями (целыми) этих функций. Классы в DLLДанная утилита удобна для DLL, использующей классы C++, по двум соображениям. Во-первых, если вы используете ключевое слово _exрort при определении класса, экспортируются все невстроенные функции-элементы и элементы статических данных для этого класса. Удобнее создать файл определения модуля с помощью IMPDEF, так как в нем будут перечислены все экспортируемые функции, включая функции-элементы и элементы статических данных. Поскольку имена данных функций являются "скорректированными", процесс перечисления всех имен функций в секции EXPORTS файла определения модуля для создания библиотеки импорта из файла определения модуля является очень утомительным. Если для создания файла определения модуля вы используете утилиту IMPDEF, она будет включать порядковое значение для каждой экспортируемой функции, так же как и исходное имя в комментариях, следующих за точкой входа функции, если экспортируемое имя является "скорректированным". Так, например, файл определения модуля, созданный утилитой IMPDEF для DLL, которая использует классы C++, будет выглядеть примерно следующим образом:
LIBRARY имя_файла
DESCRIPTION 'Описание'
EXPORTS
скоррект_имя_экпорт_функции @номер ; имя_экспорт_функции
...
скоррект_имя_экпорт_функции @номер ; имя_экспорт_функции
где "имя_файла" является корневым именем DLL, 'Описание' является значением утверждения DESCRIPTION, если DLL была предварительно скомпонована с файлом определения модулей, который включал ут- верждение DESCRIPTION, "скоррект_имя_экпорт_функции" представляет собой скорректированное имя, "номера" являются порядковыми значе- ниями (целыми) функций, а "имя_экпорт_функции" задает исходное имя функции. Функции в DLLУтилита IMPDEF создает редактируемый исходный файл, который перечисляет все экспортные функции в DLL. Вы можете отредактировать этот файл .DEF так, чтобы он содержал только те функции, которые вы хотите сделать доступными для нужной прикладной программы, а затем выполнить IMPLIB для отредактированного файла .DEF. В результате получается библиотека импорта, которая содержит информацию импорта для заданного подмножества экспортируемых функций DLL. Например, пусть вы определяете DLL, которая предоставляет функции для использования различными прикладными программами. Каждая экспортируемая функция в DLL определяется с помощью оператора _exрort. Теперь, если все прикладные программы используют все экспортируемые функции DLL, вы можете просто использовать IMPLIB для создания одной библиотеки импорта для DLL и поставлять эту библиотеку импорта с DLL. Библиотека импорта может быть скомпонована с любыми прикладными программами, исключая таким образом необходимость перечисления для каждой прикладной программы каждой используемой ей функции DLL в секции IMPORT файла определения модуля. Теперь, пусть нужно передать некоторую часть экспортируемых функций DLL отдельной прикладной программе. В идеале требуется скомпоновать специальную библиотеку импорта с этой прикладной программой - библиотеку импорта, которая предоставляет только подмножество функций, которые будут использоваться прикладной программой. Все другие экспортируемые функции в DLL для клиентной прикладной программы должны быть скрыты. Для создания библиотеки импорта, которая удовлетворяет этим условиям, выполните IMPDEF для откомпилированной и скомпонованной DLL. Утилита IMPDEF создаст файл определения модуля, который содержит в секции EXPORT перечисление всех экспортируемых функций DLL. Вы можете редактировать этот файл определения модуля, удаляя компоненты секции EXPORTS для тех функций, которые вы не хотите включать в библиотеку импорта. После того, как вы удалите ненужные экспортируемые функции, выполните утилиту IMPLIB для файла определения модуля. Результатом будет библиотека импорта, которая содержит информацию импорта только для экспортных функций, перечисленных в секции EXPORTS файла определения модуля.
Утилита TLIB: турбо библиотекарьВключенная в пакет Borland С++ утилита TLIB осуществляет управление библиотеками, состоящими из отдельных файлов с расширением .OBJ (объектных модулей). Библиотека представляет собой удобное средство для работы с совокупностью объектных модулей, рассматриваемых как единое целое.Библиотеки, включенные в систему Borland C++, были созданы с помощью программы TLIB. Утилитой TLIB можно пользоваться для создания своих собственных библиотек или для модификации стандартных библиотек системы Borland C++, своих собственных библиотек, библиотек, которые были созданы другими программистами, или приобретенных вами коммерческих библиотек. Утилиту TLIB можно использовать для того, чтобы:
Когда утилита TLIB осуществляет модификацию существующей библиотеки, она всегда создает копию оригинальной библиотеки с расширением .BAK. При модификации существующей библиотеки TLIB всегда создает копию исходной библиотеки с расширением .BAK. Это делается для вашего удобства. Утилита TLIB может также создавать (и включать в файл библиотеки) расширенный словарь, который может использоваться для ускорения процесса компоновки. Хотя утилита TLIB не обязательна для создания выполняемых программ при работе с Borland C++, она представляет собой полезный инструмент повышения производительности труда программиста. Вы обнаружите, что утилита TLIB незаменима при создании больших проектов. Если вы работаете с библиотеками объектных модулей, созданных другими лицами, то при необходимости вы можете использовать TLIB для их сопровождения. Почему следует использовать библиотеки объектных модулейПрограммируя на языке Cи и С++, вы часто создаете совокупность полезных функций Си, аналогичных функциям из библиотеки поддержки. Благодаря модульности Си и С++, вы вероятнее всего разобьете эти функции на множество отдельно компилируемых исходных файлов. В любой конкретной программе из всей совокупности этих функций вы будете использовать лишь некоторое их подмножество. Однако, явное указание каждый раз именно тех файлов, которые необходимо использовать, является весьма утомительным занятием. С другой стороны, если вы всегда включаете в результирующий файл все исходные модули, то ваша программа становится очень большой и громоздкой. Библиотеки объектных модулей разрешают проблему управления совокупностью функций, написанных на языке Си. Когда вы компонуете вашу программу с библиотекой, компоновщик просматривает содержимое библиотеки и автоматически выбирает только те модули, которые требуются для создания текущей программы. Командная строка утилиты TLIBКомандная строка утилиты TLIB имеет общий вид, приведенный ниже, где заключенные в квадратные скобки элементы являются необязательными:
tlib [@файл_подсказки] [параметры] имя_библиотеки
[операции] [, файл_списка]
Чтобы получить информацию об использовании TLIB, просто наберите команду TLIB и нажмите клавишу Enter. В IDE вы можете задать библиотеку в качестве целевого файла проекта. С помощью TargetExpert выберите для целевого типа Static Library. TLIB - это используемый по умолчанию для библиотечного файла транслятор. Он использует параметры, заданные в диалоговом окне Project Options секции Librarian (выберите в основном меню Options Project).
Использование файлов подсказкиПри работе с большим числом операций или при многократном повторении определенного числа операций удобно пользоваться файлами подсказки. Файл подсказки представляет собой текстовый файл в обычном формате ASCII (который может быть создан с помощью редактора системы Borland C++), содержащий все команды утилиты TLIB или какую-то их часть. С помощью файлов подсказки вы можете создавать команды утилиты TLIB, размер которых превышает размер командной строки DOS (128 символов). Для использования файла подсказки "имя_маршрута", в любой позиции командной строки утилиты TLIB нужно задать @"имя_маршрута".
Создание расширенного словаря: параметр /EДля ускорения процесса компоновки больших файлов библиотек (таких, как стандартная библиотека Cx.LIB), можно указать утилите TLIB, что нужно создать расширенный словарь и подсоединить его к файлу библиотеки. Данный словарь в крайне компактной форме содержит информацию, которая не вносится в стандартный словарь библиотеки. Эта информация позволяет компоновщику TLINK быстрее обрабатывать файлы библиотек, особенно в том случае, когда они находятся на гибком диске или на медленном жестком диске. Все библиотеки на ваших дистрибутивных дисках содержат расширенный словарь. Для создания расширенного словаря модифицируемой библиотеки необходимо при добавлении, удалении или замене модулей в этой библиотеке задать параметр /E при вызове утилиты TLIB. Для создания расширенного словаря существующей библиотеки, которую вы не хотите модифицировать, нужно задать параметр /E и указать TLIB удаление из библиотеки несуществующего модуля. При этом утилита TLIB выдаст предупреждающее сообщение о том, что заданный модуль в библиотеке не найден, но наряду с этим создаст расширенный словарь заданной библиотеки. Например, введите следующую строку:
tlib /E mylib -bogus
Если не использовать в командной строке TLIB параметр /e, то утилита TLIB будет игнорировать отладочную информацию в библиотеке, имеющей расширенный словарь. Задание размера страницы: параметр /PКаждый библиотечный файл в системе DOS содержит в себе словарь (располагающийся в конце .LIB файла, после объектных модулей). Для каждого модуля в библиотеке данный словарь содержит 16-битовый адрес этого конкретного модуля внутри файла .LIB; адрес задается в единицах, равных размеру страницы библиотеки (по умолчанию, этот размер равен 16 байтам). Размер страницы библиотеки определяет максимальный совокупный размер всех объектных модулей в библиотеке - библиотека не может превышать 65536 страниц. Стандартный (и минимальный) размер страницы, равный 16 байтам, позволяет создавать библиотеки размером до 1 Мбайт (приблизительно). Для того, чтобы создать библиотеку большего размера, необходимо увеличить размер страницы с помощью параметра /P; размер страницы должен являться степенью двойки; он не может быть меньше 16 байт и не может превышать 32768 байт. Все модули в библиотеке должны начинаться с границы страницы. Например, в библиотеке с размером страницы 32 (минимально возможный размер страницы который больше стандартного значения 16), в результате создания "зазоров" на каждом объектном модуле будет теряться в среднем 16 байт. Если вы пытаетесь создать библиотеку, которая слишком велика для заданного размера страницы, утилита TLIB выдаст сообщение об ошибке и предложит вам воспользоваться параметром /P, задав следующее, большее значение размера страницы. Различимость регистра символов в идентификаторе: параметр /CКогда вы добавляете к библиотеке какой-либо модуль, утилита TLIB корректирует словарь всех общедоступных идентификаторов, которые описаны в модулях библиотеки. Все идентификаторы в конкретной библиотеке должны быть различными. Если попытаться добавить к библиотеке какой-либо модуль, в котором содержится дублирующий идентификатор, то утилита TLIB выдаст сообщение, но модуль не добавит. Обычно когда утилита TLIB проверяет библиотеку на наличие дублируемых идентификаторов, буквы верхнего и нижнего регистров обычно не различаются. Например, идентификаторы lookuр и LOOKUP будут восприниматься как дубликаты. Так как Си обрабатывает буквы верхнего и нижнего регистров как различным образом, для добавления в библиотеку модуля, содержащего идентификатор, отличающийся от другого, уже имеющегося в библиотеке идентификатора, только регистром букв, нужно пользоваться параметром /C. Параметр /C указывает утилите TLIB, что нужно считать допустимыми модули, в которых идентификаторы отличаются от уже имеющихся в библиотеке только регистром букв. Если вы хотите использовать эту библиотеку с другими компоновщиками (или позволить другим лицам использовать эту библиотеку с другими компоновщиками), то во избежание "неприятностей", параметр /C использовать не рекомендуется. Удаление записей-комментариев: параметр /OПараметр /O указывает библиотекарю, что из библиотеки нужно удалить все записи комментария "Comment". Записи комментария применяются обычно для хранения информации, используемой отладчиком или другими инструментальными средствами, и не требуются для создания выполняемого файла. Использование данного параметра позволит уменьшить объем ваших библиотек (и создаваемых с их использованием программ). Список операцийСписок операций определяет, какие действия должна выполнять утилита TLIB. Он состоит из последовательности заданных одна за другой операций. Каждая операция состоит из одно- или двухсимвольного обозначения операции, за которым следует имя файла или имя модуля. Пробельные символы могут окружать либо обозначение операции, либо имя файла или модуля, но их нельзя использовать в середине двухсимвольного обозначения операции или внутри имени. В командной строке можно указывать любое число операций но суммарная длина строки не должна превышать предел в 127 символов, установленный в DOS (в COMMAND.COM). Порядок следования операций не имеет значения. Утилита TLIB всегда выполняет операции в следующем порядке:
Замена какого-либо модуля может быть произведена путем удаления его с последующим добавлением заменяющего модуля. Утилита TLIB распознает три символа действия (-, + и *), которые могут использоваться самостоятельно или объединенными в пары, образуя в совокупности пять различных операций. Для тех операций, в которых используются пары символов, порядок расположения символов не играет роли. Обозначения операций и выполняемые этими операциями действия указаны ниже (для создания библиотеки, добавьте модули к библиотеке, которая еще не существует):
Непосредственное переименование модулей в библиотеке невозможно. Для того, чтобы переименовать какой-либо модуль, необходимо выполнить операцию извлечения и удаления модуля, потом переименовать только что созданный файл, а затем добавить его обратно в библиотеку. ПримерыНиже приводится несколько простых примеров, демонстрирующих различные операции, которые могут быть выполнены утилитой TLIB.
Назад | Содержание | Вперед |
|
CITForum © 1997–2025