Как получить список символов из библиотеки automake/libtool?

Я сопровождаю twolame, библиотеку кодирования MPEG Audio Layer 2. Он собран с использованием autoconf/automake/libtool.

В рамках процесса сборки/тестирования я хотел бы получить список видимых/экспортированных символов и сравнить его с файлом с контролируемой версией, чтобы убедиться, что видны только ожидаемые символы.

В Mac OS я могу использовать nm -g libtwolame/.libs/libtwolame.dylib для успешного получения списка символов. Затем я намерен написать сценарий для извлечения символов из вывода nm и сравнения его с файлом как частью цели make check.

Но я не уверен, как рассчитать путь к двоичной библиотеке в скрипте. Есть ли способ спросить libtool, взять libtwolame/libtwolame.la и вернуть libtwolame/.libs/libtwolame.dylib (или libtwolame/.libs/libtwolame.so в Linux)? Или что-нибудь, что можно сделать с помощью макросов automake?


person njh    schedule 29.10.2019    source источник
comment
Отвечает ли это на ваш вопрос? Получить имя выходного файла библиотеки libtool   -  person LegendofPedro    schedule 30.10.2019


Ответы (1)


Если у вас уже есть файл с контролируемой версией, содержащий список экспортируемых символов (скажем, libtwolame.sym), вы можете просто указать libtool экспортировать только символы, перечисленные в этом файле.

Требуется всего три строки, добавленные к Makefile.am:

EXTRA_DIST += libtwolame.sym
libtwolame_la_DEPENDENCIES += ${srcdir}/libtwolame.sym
libtwolame_la_LDFLAGS += -export-symbols ${srcdir}/libtwolame.sym

Мы уже давно используем эту систему для libgphoto2, чтобы контролировать список символов, экспортируемых пользователям. нашей библиотеки, а также для символов, экспортируемых динамически загружаемыми драйверами камеры.

Предупреждение: Цитирование руководства по libtool (выделено мной):

-export-symbols символьный файл

Сообщает компоновщику экспортировать только символы, перечисленные в symfile. Файл символов должен заканчиваться на .sym и должен содержать имя одного символа в строке. На некоторых платформах этот параметр не работает. По умолчанию экспортируются все символы.

person ndim    schedule 30.10.2019
comment
Спасибо, это действительно полезно знать. Проголосовал, но не выбрал правильный ответ, потому что, как и в другом вопросе, на который ссылается LegendofPedro, я не думаю, что на самом деле возможно сделать то, что я изначально задал. - person njh; 13.11.2019