Поскольку вы упоминаете .so
файлы, кажется разумным предположение, что вы используете gcc
или gcc-подобный компилятор.
По умолчанию все функции extern
видны в связанном объекте. Вы можете скрыть функции (и глобальные переменные) в каждом конкретном случае, используя атрибут hidden
(сохраняя их extern
, что позволяет использовать их из других исходных файлов в той же библиотеке):
int __attribute__((visibility("hidden"))) foo(void)
{
return 10;
}
В качестве альтернативы вы можете изменить значение по умолчанию на hidden
, передав параметр -fvisibility=hidden
в gcc
во время компиляции. Затем вы можете пометить определенные функции для экспорта, используя:
__attribute__((visibility("default")))