在linux下使用dlopen() api时,可以在_init()函数中添加参数吗?

标签 c linux dlopen

现在我在linux下编写一个可加载的.so模块,我想在主程序中使用dlopen并在可加载的.so模块中使用_init()。我的程序是这样的:

主程序:

...
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){}

我不知道该怎么做,或者我可以在Linux中使用另一个新的API?谢谢~

最佳答案

不,您不能将参数传递给共享库初始值设定项。如果您需要向库传递参数,请使用常规函数。

(就您的库而言,这应该很简单 - 删除 MODULE_EXPORT 宏,并且不要将 dump_init 设为静态。只需从主机应用程序正常调用它即可.)

一般来说,您应该避免显式定义初始化函数和终结函数。它们主要供编译器内部使用,例如在 C++ 中调用对象初始值设定项。

关于在linux下使用dlopen() api时,可以在_init()函数中添加参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44896381/

相关文章:

无法链接 linker.ld

c++ - 加速 Matlab 引擎调用

linux - 创建一个 Linux shell 脚本程序来对文件中的数字和单词进行排序?

c - linux:select的第一个参数

ios - dlopen 有没有办法在 iOS 上重新加载 dylib 文件?

c - sizeof(long long) 给出 8 但数字在 2**32 处溢出

c - 编写一个 C 程序,根据给定的整数数组创建新数组,将所有偶数移到所有奇数之前

linux - 如何应用压缩补丁?

c - 让 AIX 在运行时加载所有共享符号?

c++ - 在运行时检查 C++ 共享依赖项(ldd on self)