Могу ли я добавить параметр в функцию _init() при использовании API dlopen() под Linux?
Теперь я пишу загружаемый модуль.so под Linux, я хочу использовать dlopen
в основной программе и использовании _init()
в загружаемом модуле.so. Моя программа такова:
Основная программа:
...
dlopen(lib, flags);
...
загружаемый модуль:
#define MODULE_EXPORT(name, minit, mexit) \
int __##name##_init(void) __attribute__((alias(#minit))); \
void __##name##_exit(void) __attribute__((alias(#mexit)));
MODULE_EXPORT(dump, dump_init, dump_exit);
static int dump_init(void)
{
...
}
Теперь я хочу добавить параметр в функцию dump_init, например так:
static int dump_init(const char *param){}
Я не знаю, как это сделать, или я мог бы использовать другой новый API в Linux? Спасибо ~
1 ответ
Нет, вы не можете передавать аргументы инициализатору общей библиотеки. Если вам нужно передать параметры в вашу библиотеку, используйте обычную функцию.
(В случае вашей библиотеки это должно быть просто - удалите MODULE_EXPORT
макрос, а не делать dump_init
статичный. Просто позвоните как обычно из хост-приложения.)
Вообще говоря, вам следует избегать явного определения функций инициализатора и финализатора. Они в первую очередь предназначены для внутреннего использования компилятором, например, для вызова инициализаторов объектов в C++.