При использовании gcc
для создания общей библиотеки можно ограничить видимость символов с помощью -fvisibility=hidden
. Я также только что узнал, что вы можете ограничить видимость, используя опцию сценария версии до ld
.
Теперь я хочу знать, возможно ли их совместить. Скажем, у меня есть программа со следующим:
void foobar() {}
void say_hello() {}
Затем у меня есть файл сценария версии с:
{
global:
foobar;
}
И я компилирую это с помощью:
gcc -fvisibility=hidden -Wl,--version-script=<version-script> test.c -shared -o libtest.so
Когда я потом запускаю nm
, я обнаруживаю, что никакие символы не экспортируются. В любом случае, я могу установить скрытую видимость по умолчанию и использовать версию-скрипт (или что-то еще) для экспорта символов?