Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

На главную -> MyLDP -> Программирование и алгоритмические языки


Ulrich Drepper "Как писать разделяемые библиотеки"
Назад Оглавление Вперед

2.2.6. Параметр -export-symbols программы Libtool

Четвертый способ ограничения экспорта является наименее желательным среди всех других. Это именно тот способ, который используется в программе GNU Libtool когда указывается параметр -export-symbols. Этот параметр используется для передачи в Libtool имени файла, содержащего по одному в каждой строке имена всех символов, которые должны быть экспортированы, Обращение в командной строке к Libtool может выглядеть следующим образом:

$ libtool --mode=link gcc -o libfoo.la \
   foo.lo -export-symbols=foo.sym

Файл foo.sym будет содержать список экспортируемых символов. Файл foo.lo является специальным видом объектных файлов, которые создает Libtool Чтобы получить дополнительную информацию об этой и о других странных особенностях работы в командной строке, обратитесь к Руководству по использованию Libtool.

Здесь нас интересует код, который компоновщик создает с помощью этого метода. Компоновщик Libtool GNU преобразует параметр -export-symbols в совершенно бесполезный параметр -retain-symbols-file. Этот параметр указывает компоновщику сокращать обычные таблицы символов, а не динамическую таблицу символов. Обычная таблица символов будет содержать только символы, указанные в файле списка экспорта плюс специальные символы STT SECTION, которые могут потребоваться в перемещениях. Все локальные символы убираются. Проблема в том, что с динамической таблицей символов вообще ничего не делается, а это таблица, которая фактически используется во время выполнения.

Эффект от использования Libtool этим способом в том, что программа, читающая обычную таблицу символов (например, nm) не находят никаких символов, но они перечислены в списке экспорта. И это так. Нет никаких объектов времени выполнения. Не нужно делать какие либо символы недоступными для динамического компоновщика, никакие из обычных перемещений не будут преобразовываться в относительные перемещения.

Единственная причина, из-за которой этот метод упомянут здесь, в том, что есть надежда, что Libtool научится конвертировать списки экспорта в таблицы символов анонимных версий, которые мы видели в предыдущем разделе, когда использовали компоновщик GNU. В этот момент Libtool станет полезным. До этого момента полагаться на параметр -export-symbols будет, в лучшем случае, заблуждением.


Предыдущий раздел:   Следующий раздел:
Назад Оглавление Вперед