Как мне указать, какую функцию экспортировать из библиотеки .so при компиляции кода C? - PullRequest
4 голосов
/ 17 декабря 2010

У меня есть код функции в моем коде "C". Когда я компилирую .so, я вижу все имена в результате .so файла. Как я могу указать (в коде или в файле make), что должны экспортироваться только некоторые функции, тогда как другие являются частными только для внутреннего использования.

Ответы [ 2 ]

18 голосов
/ 17 декабря 2010

Поскольку вы упоминаете .so файлы, кажется разумным предположение, что вы используете gcc или gcc-подобный компилятор.

По умолчанию все функции extern видны в связанном объекте. Вы можете скрыть функции (и глобальные переменные) в каждом конкретном случае, используя атрибут hidden (сохраняя их extern, что позволяет использовать их из других исходных файлов в той же библиотеке):

int __attribute__((visibility("hidden"))) foo(void)
{
    return 10;
}

В качестве альтернативы вы можете изменить значение по умолчанию на hidden, передав параметр -fvisibility=hidden в gcc во время компиляции. Затем вы можете пометить определенные функции для экспорта, используя:

__attribute__((visibility("default")))
7 голосов
/ 17 декабря 2010

В C, если вы хотите, чтобы функция оставалась внутренней по отношению к файлу (технически, «блоку компиляции»), в котором она находится, вы объявляете ее «статической».Например,

static int privateAddOne(int x) { return x + 1; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...