C 在linux下使用dlopen()api时,是否可以在_init()函数中添加param?

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

现在我在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__((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>,会发生什么情况?