GCC - The Complete Reference (537669), страница 53
Текст из файла (страница 53)
Вызов б1вуш() возвращает адреса функций, Обращение к функции с1с1ове ( ) отсоединяет (()е(асйе) текущую программу от загруженной разделяемой библиотеки. Если к динамической библиотеке не присоединено больше ни одной программы, то она выгружается из памяти. Функция б1вггог ( ) возвращает строку описания ошибки, произошедшей при последнем вызове одной из функций Е1ореп(), 61с1ове(), 61вуш() .
Прн отсутствии ошибок 61еггог() возвращает значение НтЛ ь. Следующая программа будет при выполнении загружать разделяемую библиотеку 11ЬвауЕп. во и вызывать из нее две функции: /« вау.с «/ Мьпс1пае «11Есп.Ь« $1пс1п<)а <ве<11о.Ь« 1пе ша1п(ьпе агдс,сЬаг «агдч[>) ( чо1й «Ьап<тзез сЬаг *еггогз чоЫ (*вауЬе11о)(чоЫ)( чоЫ (*ваувошееиьпд)(сЬаг *>( Ьап()1е = ((1ореп(«11ЬвауЕп.во",неьр ьааг)з ЕЕ(еггог = 61еггог()) ( ргьпсЕ(«««в~п",аггог)з ехьв (1); > вауЬе11о = 61вуш(Ьапй1а,«вауЬе11о«)( 1Е(еггог = 61еггог(>) ( ргьпсЕ(«з«в1п",еггог)г ехье(1)к > ваувошесььпд = 61вуш(ьап()1е,«ваувошееЬЕпд«)к 1Е(еггог = ((1еггог()) ( ргьпЕЕ(«9«в1п«,еггог)з ехьс(1)к 240 Часть (((.
Внутренняя структура и окружение ваупе11о()к ваувошесьвпд("тьтв ьв вовесИпд") г о1с1ове(папа1в)к ) Директивой йтпс1ийе в программу включается заголовочный файл 61йсп. Ь, который содержит прототипы используемых функций и некоторые другие определения. В начале функции пштп () находятся следующие объявления: указателя идентификатора для обращения к разделяемой библиотеке *Ьапб1е; указателя на строку сообщения об ошибке *ехкок; и указателей для каждом вызываемой из библиотеки функции. В командной строке для компиляции программы нашего примера необходимо указать разделяемую библиотеку, которая содержит используемые программой основные функции для использования динамических библиотек: 3 дсс вау.с -1с1 -о вау Загрузка в память разделяемой библиотеки выполняется вызовом функции 61ореп() .
При этом в аргументах необходимо указать имя библиотеки и значение флага, который определяет способ загрузки функций лри их вызове из библиотеки. При вызове а1ореп() выполняется последовательный поиск требуемой разделяемой библиотеки ло ее имени в следующих вариантах расположения: ° Если имя библиотеки начинается с символа наклонной черты "/", то считается, что оно содержит полный или относительный путь к файлу. При этом имя и расположение библиотеки должны быть указаны точно, в других местах поиск не проводится. В противном случае, когда имя начинается с любого другого символа, выполняется поиск библиотеки с указанным именем последовательно в вариантах расположения, описанных далее н этом списке.
° В каждом из каталогов списка переменной окружения ьр ыввлву рдтн. (В системах 1)МХ имена каталогов в таких списках разделяются двоеточием ": ".) в Среди библиотек из списка разделяемых библиотек, который содержится н файле /еес/1й. во. сасЬе. Для поддержки этого списка применяется утилита Ыс К 1д. ° В каталоге /ивг/11Ь.
° В каталоге /11Ь. ° В текущем каталоге. Второй аргумент вызова функции с)1 орел ( ) — флаг способа загрузки библиотеки. Он может иметь следующие значения. При значении втьр ыозг все функции библиотеки сразу загружаются в память и после этого становятся доступными для вызова. Прн значении флага втър ьдвт загрузка каждой функции задержинается до тех лор, пока ее имя не будет передано функции й1вутя( ) . Каждое из двух этих значений флага может быть соединено с помощью ключевого слова Ов со значением втьр аьовдь. При этом все внешние вызовы загружаемой динамической библиотеки разрешаются вызовом функций из других динамических библиотек.
Последние при этом также загружаются в память машины. Глава 12. Использование библиотек и способы компоновки 24 1 В нашем примере вызов 61ву>а( ) с идентификатором библиотеки (уже полученным из функции >21ореп () ) и именем требуемой функции библиотеки возвращает адрес памяти для вызова названной функции. После обращений к 61ореи() и б1вуат() вызывается функции 61еггог(). Благодаря этому программа может определять любые ошибки и выдавать по ним сообщения. Утилиты для работы с объектными файлами и библиотеками Обслуживание библиотек и расположенных в них объектных файлов состоит из достаточно устоявшихся действий.
Они зависят от применяемых соглашений об именах файлов и уровня организации вашей системы. Несмотря на широкие возможности для работы с библиотеками, предоставляемые программами дсс и аг, в некоторых обстоятельствах возникает необходимость применения других утилит. Например, может понадобиться проверить содержимое какого-либо двоичного файла в выполнить некоторые его преобразования, или нужно перестроить отдельную библиотеку, или изменить порядок поиска библиотек. Конфигурирование поиска разделяемых библиотек Утилита 1бсопбдд выполняет две основные функции работы с разделяемыми библиотеками. Во-первь>х, она создает и обновляет динамические компоновочные связи (1!п)>я) между разделяемыми библиотеками.
Эти связи служат для того, чтобы программы использовали последние и наиболее актуальные версии библиотек. Вовторых, утилита 1бсопгдд создает полный список доступных разделяемых библиотек и записывает его в файл /есс/1>з. вс. сасце. Утилита 1бсопд1д считывает список каталогов для поиска разделяемых библио>ек из файла /еес/1б. во.сопб, Затем она выполняет в этих каталогах (вместе с каталогами /11Ь и /ивг/11Ь) поиск любых разделяемых библиотек, при необходимости обновляя их динамические связи, и заносит все найденные и обработанные библиотеки вместе с их связями в список, который сохраняет в файле /евс/ 14. во. сасце, Имена каталогов в списке, который находится в файле /евс/ 16.
во. сопг, могут отделяться друг от друга символами перевода строки, символами табуляции (отступами), двоеточиями или пробелами. Файл /еес/16. во. сасце имеет не текстовый формат, ручное редактирование этого файла не предусмотрено. Перед построением файла /еес/16. во. сасЬе утилита 1>зсопгад анализирует имя и содержимое каждой библиотеки и создает динамические связи библиотек таким образом, чтобы при выполнении программ использовались новейшие версии библиотек. Например, при загрузке программой библиотеки 11Ь>21. во.
2 через установленную для этой библиотеки динамическую компоновочную связь (11пк) может в действительности загружаться библиотека с именем 1зЬ>11-2. 2. 4. во. При выпуске новой версии этой библиотеки, содержащей исправления допущенных ошибок (например, 11Ь61-2. 2. 5. во или 11Ь61-2. 3. О. во), утилита 16сопбдд 242 Часть )И. Внутренняя структура и окружение тв 1дсапб19 -и По опции -и программа 1сзсопйзд ВЫВОДИТ СПИСок всЕх СОЗдаваЕмых диНамических связей и описания всех выполняемых действий. Полный список опций приводится в таблице )2.3. Таблица 12.3.
Опции командной строки для утилиты й)солт(й Оинин Оииеннин Выводит список опций программы и завершает на этом ее работу. использует укаэанный файл сзавпвтв в качестве выходного файла для хранения каша вместо применяемого па умолчанию /вьа/1д. ва.аааьв. Та же, чта и --Сахкмгт, -С Сзтвптвв -с етт -С Г11впатв Использует файл с именем сктапатв е качЕСтВЕ ВхсднОГО конфигурационного файла вместо применяемого па умолчанию /вка/1д. во.
солт. указывает формат выходного файла каша /вка/1д. ва.аааьв. поле стк может содержать следующие доступные значения: а1д, пвн или сатрап. Па умолчанию применяется сатрап. Выводит список опций программы и на этом завершает ее работу. --сактат = В ва --Ье1р Па этой апции утилита тдаапсся обновляет динамические связи библиотек в каталогах, указанных в командной строке. При этом не создается выходной кэш-файл.
Опция указывает не обновлять существующий кэш-файл. Та же, чта и опция --рх1пк-аааьв. Выводит в алфавитном порядке список всех библиотек в кэш-файле. При этом выводятся имена (включающие путь расположения) всех библиотек, которые имеют компоновочные связи а указываемой а листинге текущей библиотекой. --рхспк-аааЬв Устанавливает указанный каталог в качестве текущего и использует ега как корневой каталог для поиска библиотек. Выводит информацию а синтаксисе команд утилиты 1даапс1д и на этом завершает ее работу, Выводит описания действий, выполняемых программой. Выводит инфармацию а версии программы.
Выводит апиаания выполняемых программой действий. Равносильна опции -к дзтватаку --пваяв --чахЬавв Выводит информацию а версии программы, Равносильна опции -н. Опция указывает не создавать динамические компоновочные связи (Кпхз). --чвкв1ап обновит существующую динамическую связь 11Ьс11. но. 2, установив сс на новую версию. Однако при выпуске принципиально новой версии, использование которой может повлиять на выполнение старых программ (скажем, 11Ьс11-3. О. О.
во), существующая динамическая связь с именем 11Ьс11. но. 2 сохраняется и создается новая связь с именем 11Ьс11. ао. 3. Запуск утилиты 1гзсопй1д должен выполняться от илгени привилегированного пользователя. Поэтому перед применением этой утилиты следует зарегистрироваться в системе как супсрпользователь (гоо!).
Следующая команда создаст все необходимые новые динамические связи и сгенерирует новую версию файла /евс/16. ао. сасЬе: Глава 12. Использование библиотек и способы компоновки 243 Вывод из объектных файлов имен программных символов ь пт 11Ьс.а В таблице 12.4 содержится список опции командной строки, поддерживаемых утилитой п]в. Таблица 12.4. Опции утилиты пл] рииив Оиивииии То же, что и --рс1пс-е11е-пата. То же, что и --аеЬпд-ауте.
То же, что и г -востас Ьвс. Действует по умолчанию. То же, что и --аевапд1е. То же, что и --упмкес.. -в -с [суре] Выводит программные символы, предназначенные для использования при отладке. Обычно они не выводятся. Имена символов преобразовываются из сокращенной формы е полную (Оегпапд[еб зугпЬо] пагпез]. То есть применяется Леманглирование имен объектного уровня в их представление пользовательского уровня. При применении атой опции в выходном списке имена символов выводятся в том же виде, в котором они были определены в исходном коде. При указании типа деманглера поле суре может содержать одно из допустимых значений: апес, дпп, 1пс1а, аст, ьр, еад, дпп-чз, 3ача, опас или сотрад. — аевапд1е [ суре] Для динамических объектов, таких как разделяемая библиотека, зта опция выводит адреса динамически перемещаемой адресации вместо обычного смещения.