Как я могу использовать файлы заголовков библиотеки для создания файла libfoo.sym для использования с libtool -export-symbols?

Я создаю общую библиотеку для дистрибутива Debian GNU/Linux, и меня беспокоит количество символов из внутренних функций, которые она экспортирует без необходимости. Поскольку библиотека построена с использованием autoconf/automake/libtool, ответ прост: я могу просто добавить -export-symbols libfoo.sym к libfoo_la_LDFLAGS и указать только те символы, которые я хочу экспортировать в этот файл.

Но поскольку это связано с подверженной ошибкам ручной работой, я решил, что должен быть лучший способ. Можно ли автоматизировать чтение (в данном случае) десятков файлов .h, которые сопровождают библиотеку, и сгенерировать первую версию файла libfoo.syms.

Могу ли я просто использовать компилятор C (или C++), чтобы сделать за меня тяжелую работу?


person hillu    schedule 23.01.2014    source источник
comment
Если вы использовали какое-то «пространство имен» для API библиотеки, вы можете рассмотреть возможность использования опции -export-symbols-regex REGEX.   -  person Brett Hale    schedule 23.01.2014
comment
@BrettHale да, я думал об этом, но, чтобы быть уверенным, мне все еще нужно прочитать все эти файлы заголовков. (Я не автор.)   -  person hillu    schedule 23.01.2014
comment
Единственный другой способ автоматизировать процесс, который я могу придумать, — это использовать ctags. Скорее всего, он уже установлен в вашей системе.   -  person Brett Hale    schedule 23.01.2014


Ответы (2)


Это эквивалентно извлечению прототипов функций и описано здесь: Извлечение прототипов функций C/C++

person Carlos O'Donell    schedule 23.01.2014

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

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

Могу ли я просто использовать компилятор C (или C++), чтобы сделать за меня тяжелую работу?

В некоторых компиляторах есть инструменты, помогающие в этом, например поддержка visibility в gcc.

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

person ldav1s    schedule 23.01.2014