C 在linux下使用dlopen()api时,是否可以在_init()函数中添加param?
现在我在linux下编写了一个可加载的.so模块,我想在主程序中使用C 在linux下使用dlopen()api时,是否可以在_init()函数中添加param?,c,linux,dlopen,C,Linux,Dlopen,现在我在linux下编写了一个可加载的.so模块,我想在主程序中使用dlopen,在可加载的.so模块中使用\u init()。我的程序是这样的: static int dump_init(const char *param){} 主程序: ... dlopen(lib, flags); ... 可加载模块: #define MODULE_EXPORT(name, minit, mexit) \ int __##name##_init(void) __attribute__((ali
dlopen
,在可加载的.so模块中使用\u init()
。我的程序是这样的:
static int dump_init(const char *param){}
主程序:
...
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函数中添加param,如下所示:
static int dump_init(const char *param){}
我不知道怎么做,或者我可以在linux中使用另一个新的api?谢谢~不,您不能将参数传递给共享库初始值设定项。如果需要向库传递参数,请使用常规函数 (对于您的库,这应该很简单——删除
模块导出
宏,不要使转储_init
静态。只需从主机应用程序正常调用它即可。)
一般来说,应该避免显式定义初始值设定项和终结器函数。它们主要用于编译器内部使用,例如调用C++中的对象初始化器。如果你能做到这一点,对于第二次调用到不需要初始化库的代码> DLOPEN/CODE>,会发生什么情况?