пишу либу, насколько я понимаю, по умолчанию в экспорт попадает всё, что не объявлено как static. Можно как-то оставить только нужное, а служебные функции убрать?
Делай что должно, и будь что будет
Re: Ограничить количество экспортируемых из .so функций
Здравствуйте, SergH, Вы писали:
SH>пишу либу, насколько я понимаю, по умолчанию в экспорт попадает всё, что не объявлено как static. Можно как-то оставить только нужное, а служебные функции убрать?
Linker script позволяет сделать такое (подразумеваем, что используется GNU ld).
The God is real, unless declared integer.
Re: Ограничить количество экспортируемых из .so функций
Здравствуйте, SergH, Вы писали:
SH>пишу либу, насколько я понимаю, по умолчанию в экспорт попадает всё, что не объявлено как static. Можно как-то оставить только нужное, а служебные функции убрать?
спасибо, не знал, использовал только для удаления локальных и отладочных.
но не очень удобно вытаскивать это в сборку, хотелось бы прямо в коде пометить, что нужно вытащить наружу, а что нет.
Делай что должно, и будь что будет
Re[2]: Ограничить количество экспортируемых из .so функций
Здравствуйте, SergH, Вы писали:
SH>но не очень удобно вытаскивать это в сборку, хотелось бы прямо в коде пометить, что нужно вытащить наружу, а что нет.
В коде это отлично помечается static’ом.
Re[4]: Ограничить количество экспортируемых из .so функций
Здравствуйте, SergH, Вы писали:
SH>пишу либу, насколько я понимаю, по умолчанию в экспорт попадает всё, что не объявлено как static. Можно как-то оставить только нужное, а служебные функции убрать?
В простейшем случае такой скрипт выглядит очень просто:
{
global:
symbol1;
symbol2;
...
local:
*;
}
Такой скрипт можно подсунуть линкеру либо через LD script (чего вы вряд ли хотите), либо опцией --version-script
Если вы используете autotools с libtool, то они несколько упрощают эту задачу: достаточно создать текстовый файл с перечислением символов, которые вы собираетесь проэкспортировать, и добавить в LDFLAGS опцию -export-symbols с именем этого файла.
Re[3]: Ограничить количество экспортируемых из .so функций
Здравствуйте, SergH, Вы писали:
SH>Здравствуйте, b-3, Вы писали:
b-3>>Если пишете на GCC, то делайте так: http://gcc.gnu.org/wiki/Visibility
SH>То что надо, спасибо!
Только учтите, что публичными все равно остануться:
а) то что нужно для RTTI (typeinfo)
б) проинстанцированное из STL (включая, например, что-то в духе std::auto_ptr<MySecureLicenseCheckerThatIdontExportAndHideHahaha>::auto_ptr()) т. к. они принудительно в хидерах libstdc++ объявлены как пабликовые.
Как (просто и без извращений) бороться с первым не знаю, а для того чтобы скрыть второе я в свое время просто патчил хидеры libstdc++, там одна строчка.
Re[4]: Ограничить количество экспортируемых из .so функций
Здравствуйте, MescalitoPeyot, Вы писали:
MP>Только учтите, что публичными все равно остануться: MP>а) то что нужно для RTTI (typeinfo) MP>б) проинстанцированное из STL (включая, например, что-то в духе std::auto_ptr<MySecureLicenseCheckerThatIdontExportAndHideHahaha>::auto_ptr()) т. к. они принудительно в хидерах libstdc++ объявлены как пабликовые.
MP>Как (просто и без извращений) бороться с первым не знаю, а для того чтобы скрыть второе я в свое время просто патчил хидеры libstdc++, там одна строчка.
Спасибо, буду знать.
Но в данном случае у меня чистый С, так что это не проблема.