Мое приложение работает со статической библиотекой, которая имеет API расширений. API может вызывать функцию инициализации расширения из внешней общей библиотеки или из «локального» двоичного файла. То есть я могу статически включить функцию инициализации расширения в основной исполняемый файл.
Локальная функция ищется вызовом dlsym
, а функция инициализации должна динамически экспортироваться из основного бинарного файла. Это следующий вызов nm
:
nm -CD <binary>
должен перечислить мою функцию инициализации.
Предположим, что функция инициализации имеет такую подпись:
int init_func(INIT_STRUCT *);
Эта функция не вызывается напрямую - предполагается, что она загружается только вызовом dlsym
.
Итак, у меня есть два связанных вопроса:
- как заставить компоновщика не исключать эту функцию из сгенерированного бинарника?
- как заставить компилятор/компоновщик динамически экспортировать эту функцию?
(Я использую gcc
для компиляции и компоновки моей программы)