Операционная система UNIX. Руководство программиста

Отсос на сайте http://good-tube.net. |

Использование импортируемых имен - часть 4


Избирательное использование импортируемых имен

В каждом элементе архива лучше определять небольшое количество указателей на импортируемые имена. Это предотвращает включение в выполняемый файл лишних об,ектных модулей. Например, если в элементе архива определены три указателя, все три ссылки будут разрешены редактором внешних связей, даже если реально будет использоваться только одна из них.

Чтобы уменьшить количество дозагружаемых модулей, можно сделать несколько исходных файлов, определяющих указатели на импортируемые имена по одному, либо небольшими группами. Если импортируемая функция будет использоваться индивидуально, указатель на нее следует поместить в отдельный исходный файл (тогда он попадет в отдельный элемент архива), что позволит редактору внешних связей строить оптимальные выполняемые файлы.

Рассмотрим несколько примеров. В первом приближении можно определить все указатели в одном исходном файле pointers.c:

. . . int (*_libc_ptr1)() = 0; char *(*_libc_malloc)() = 0; int (*_libc_ptr2)() = 0; . . .

Чтобы соответствующие функции можно было бы использовать по отдельности, нужно иметь несколько исходных файлов, и, соответственно, несколько элементов архива. В каждом исходном файле должен определяться один указатель или небольшая группа совместно используемых указателей. Пример:

Файл Содержимое
ptr1.c   int (*_libc_ptr1)() = 0; 
 pmalloc.c   char *(*_libc_malloc)() = 0; 
 ptr2.c   int (*_libc_ptr2)() = 0; 

Ранее все указатели определялись в единственном объектном файле, pointers.o. Его извлечение из библиотеки в ходе редактирования внешних связей потребовало бы определения ptr1, malloc и ptr2. Разделение этого файла на три позволяет использовать каждый указатель по отдельности, избегая таким образом возникновения неразрешенных внешних ссылок на ненужные функции.




Начало  Назад  Вперед



Книжный магазин