В примерах этого раздела используются два исходных файла, share1.c и share2.c. Файл share1.c содержит следующий текст:
/************
 * share1.c: shared library source.
*************/
 
#include <stdio.h>
 
void func1 ()
 {
   printf("вызвана func1\n");
 }
 
void func2 ()
 {
   printf("вызвана func2\n");
 }
Файл share2.cсодержит следующий текст:
/************
 * share2.c: shared library source.
*************/
 
void func3 ()
 {
   printf("вызвана func3\n");
 }
Экспортируемыми символами в этих файлах являются func1, func2 и func3.
В примерах этого раздела используется главный исходный файл main.c. Файл main.c содержит следующий текст:
/************
 * main.c: содержит ссылки на символы, определенные в файлах
 * share1.c и share2.c
*************/
 
#include <stdio.h>
 
  extern void func1 (),
                 unc2 (),
                 func3 ();
main ()
 {
                 func1 ();
                 func2 ();
                 func3 ();
 }
В примерах этого раздела используется файл экспорта shrsub.exp. Файл shrsub.exp содержит следующий текст:
#! /home/sharelib/shrsub.o * Полное имя объектного файла общей библиотеки func1 func2 func3
Строка, начинающаяся с #!, применяется только при использовании файла для импорта. В этом случае строка с #! указывает имя файла общей библиотеки, который будет применяться на этапе выполнения.
cc -c share1.c cc -c share2.c cc -o shrsub.o share1.o share2.o -bE:shrsub.exp -bM:SRE -bnoentry
В результате выполнения этих команд будет создана общая библиотека
shrsub.o в каталоге /home/sharedlib. 
| Флаг -bM:SRE | Помечает результирующий объектный файл shrsub.o как реентерабельную объектную библиотеку | 
Каждый процесс, который применяет общий код, получает индивидуальную копию
данных, размещенную в защищенной области процесса. 
| флаг | Устанавливает фиктивную точку входа _nostart для переопределения точки входа по умолчанию _start | 
| -bnoentry | Сообщает редактору связей о том, что общая библиотека не имеет точки входа. | 
В общей библиотеке может присутствовать точка входа, однако системный загрузчик не использует ее при загрузке общей библиотеки.
ar qv libsub.a shrsub.o
Это необязательная операция. Однако помещение библиотеки в архивный файл упрощает ее применение при компоновке программ, так как для архивных библиотек можно использовать ключи -l и -L команды ld.
cc -o main main.c -lsub -L/home/sharedlib
Если общая библиотека не была помещена в архив, введите команду:
cc -o main main.c /home/sharedlib/shrsub.o -L/home/sharedlib
После этого программу main можно запускать. Символы func1, func2 и func3 помечены для отложенного связывания на этапе загрузки. На этапе выполнения системный загрузчик загрузит модуль общей библиотеки (если он еще не загружен) и динамически обработает обнаруженные ссылки.
| Флаг -L | Добавляет указанный каталог (в данном случае, /home/sharedlib) в путь поиска библиотеки, хранящийся в разделе загрузчика программы. | 
Во время работы программы путь поиска библиотек указывает загрузчику, где
расположены общие библиотеки.
| Переменная среды LIBPATH | Может использоваться в качестве пути поиска библиотек; содержит список каталогов, перечисленных через точку с запятой. Формат этой переменной совпадает с форматом переменной PATH. | 
Каталоги из этого списка применяются при обработке ссылок на внешние объекты. Каталоги /usr/lib и /lib содержат общие библиотеки и, как правило, должны присутствовать в пути поиска библиотек.
Глава 19, Общие библиотеки, общая память и подсистема malloc.
Функции load, loadquery, loadbind, unload.
Формат объектного файла XCOFF (a.out).