我正在尝试在xcode中创建一个dylib。我可以通过在Xcode中选择c / c ++ Library模板来创建dylb。
我想添加" init"这个dylib的方法。我不知道如何添加" init" dylib的方法。
我的想法是打电话给这个" init"在dlopen()的帮助下运行时。
感谢您的宝贵意见。
答案 0 :(得分:0)
如果您使用C ++编写代码,则可以在dlopen
- ed库中拥有静态对象;他们的构造函数在dlopen
时被调用(他们的析构函数在dlclose
时间运行。
如果您的代码是由gcc
编译的(无论是C语言,还是C ++语言,或者甚至是某些其他语言),您可以使用constructor
和destructor
{{3} }
(您可以使用过时的符号_init
和_fini
,但这是dlopen
的过时功能(至少在Linux上,可能在MacOSX上)。然后你必须在C ++中声明它们extern "C" void _init(void);
。)
不要忘记dlsym
处理function attributes,因此您要为其声明extern "C"
C ++名称。
您也可以拥有自己的动态加载内容的约定,例如,名为my_initialization
的函数,而执行dlopen
的代码稍后会使用dlsym
来查找它。您应该有关于dlsym
编辑符号及其使用方式的文档约定。
我不太了解MacOSX,但我用Google搜索unmangled names