Библиотека сайта 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 будет, в лучшем случае, заблуждением.
Предыдущий раздел: | Следующий раздел: | |
Назад | Оглавление | Вперед |