Как получить список символов из библиотеки automake / libtool? - PullRequest
1 голос
/ 30 октября 2019

Я поддерживаю 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?

1 Ответ

1 голос
/ 30 октября 2019

Если у вас уже есть файл с управлением версиями, содержащий список экспортированных символов (скажем, 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

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

...