0

我正在尝试在 xcode 中创建一个 dylib。我可以通过在 Xcode 中选择 c/c++ 库模板来创建 dylb。

我想为这个 dylib 添加“init”方法。我不知道如何为 dylib 添加“init”方法。

我的想法是在 dlopen() 的帮助下在运行时调用这个“init”。

感谢您的宝贵反馈。

4

1 回答 1

0

如果您使用 C++ 编写代码,您的dlopen-ed 库中可能有静态对象;他们的构造函数在dlopen时间被调用(并且他们的析构函数在dlclose时间运行)。

如果您的代码是由gcc(用 C 或 C++,甚至可能是其他一些语言)编译的,您可以使用constructoranddestructor 函数属性

(您可以使用过时的符号_init_fini但这是dlopen(至少在 Linux 上,可能在 MacOSX 上)的过时功能。然后您必须extern "C" void _init(void);在 C++ 中声明它们。)

不要忘记dlsym处理未损坏的名称,因此您要为其声明extern "C"C++ 名称。

你也可以有你自己的约定,你的动态加载的东西应该有,例如,一个名为的函数my_initialization,你的代码dlopen稍后会使用dlsym它来找到它。您应该已经记录了哪些符号是dlsym-ed 以及如何使用它们的约定。

我不太了解 MacOSX,但我用谷歌搜索了这个文档

于 2012-07-20T07:26:42.793 回答