我正在尝试在 xcode 中创建一个 dylib。我可以通过在 Xcode 中选择 c/c++ 库模板来创建 dylb。
我想为这个 dylib 添加“init”方法。我不知道如何为 dylib 添加“init”方法。
我的想法是在 dlopen() 的帮助下在运行时调用这个“init”。
感谢您的宝贵反馈。
如果您使用 C++ 编写代码,您的dlopen
-ed 库中可能有静态对象;他们的构造函数在dlopen
时间被调用(并且他们的析构函数在dlclose
时间运行)。
如果您的代码是由gcc
(用 C 或 C++,甚至可能是其他一些语言)编译的,您可以使用constructor
anddestructor
函数属性
(您可以使用过时的符号_init
,_fini
但这是dlopen
(至少在 Linux 上,可能在 MacOSX 上)的过时功能。然后您必须extern "C" void _init(void);
在 C++ 中声明它们。)
不要忘记dlsym
处理未损坏的名称,因此您要为其声明extern "C"
C++ 名称。
你也可以有你自己的约定,你的动态加载的东西应该有,例如,一个名为的函数my_initialization
,你的代码dlopen
稍后会使用dlsym
它来找到它。您应该已经记录了哪些符号是dlsym
-ed 以及如何使用它们的约定。
我不太了解 MacOSX,但我用谷歌搜索了这个文档