LINUX.ORG.RU

сборка .so, экспорт только выбранных функций/переменных


0

0

Собирая свою библиотеку никак не могу ограничить экспорт функций и переменных в выходной файл .so. В Pascal все довольно просто было - в главном модуле перечислялись экспортируемые функции после ключевого слова export, что-то подобное в C не обнаружил... не, объявление некоторых функций и переменных через static помогло(не экспортило в выходной файл), но это ведь бред :) К тому же вызывающий ошибки, при линковке библиотеки к проекту(одни undeclarated symbol, хотя сама библиотека собралась и никаких проблем не возникло). В общем помогите, ибо знания одного синтаксиса языка никоим образом не влияет на знание нюансов :)

ЗЫ: не откажусь от простеньких примеров или толковых доков )

anonymous

Re: сборка .so, экспорт только выбранных функций/переменных

Почему же бред? Именно так это и делается. А тот undeclared symbol всё таки должен быть вынесен.

undet ()

Re: сборка .so, экспорт только выбранных функций/переменных

>>то есть не объявлен как static
в том и дело что эту функцию именно надо скрыть, т.к. она принимает участие только в процессе работы другой функции...

2dilmah:
Последний ответ очень помог :)

#pragma GCC visibility push(hidden)
extern void someprivatefunct(int);
#pragma GCC visibility pop

Хоть и через задницу(ведь приходиться контролировать всё и вся чтоб "спрятать"), но вполне решаемо.

anonymous ()

Re: сборка .so, экспорт только выбранных функций/переменных

Visibility появился вроде только в GCC 4. В более старых версиях можно использовать --version-script в ld (смотри примеры в гугле).

Deleted ()

Re: сборка .so, экспорт только выбранных функций/переменных

Можно сказать в командной строке компилятору -fvisibility=hidden, чтобы нужно было явно указывать именно экспортируемые символы.

gzh ()

Re: сборка .so, экспорт только выбранных функций/переменных

вот (http://people.redhat.com/drepper/dsohowto.pdf) классическая статья на тему что такое shared library, как управлять областями видимости и т.п.

ott ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.