在Windows中有一个 DllMain 和 DLL_PROCESS_ATTACH / DLL_PROCESS_DETACH 标志,允许在 DLL >之后初始化/释放资源strong>附加到进程...那么如果 OS X ,如何指定入口点?与往常一样,我在Apple文档中找不到任何有用的东西:(
答案 0 :(得分:5)
Apple网站上的Dynamic Library Programming Topics文档显示了
的使用__attribute__((constructor))
和
__attribute__((destructor))
在动态库中实现初始化器和终结器。
答案 1 :(得分:3)
那不行吗?
__attribute__((constructor)) void DllMain()
{
// code
}
答案 2 :(得分:2)
我认为malkia(upvoted)和Bavarious有正确的答案,但是因为我已经查过了:一种方法是设置你的init例程。在库的Xcode构建设置中查找“初始化例程”。使用下划线前缀函数名称。即如果您的init例程被称为DllMain,请输入“_DllMain”。
另外,我之前使用obj-c ++进行了一些初始化,做了类似的事情:
class LibraryInit
{
public LibraryInit()
{
// do some init stuff here
}
} ;
static LibraryInit sLibraryInit();
答案 3 :(得分:0)
我的主应用程序静态链接到带有函数ABC的静态库A,我的动态库xyz.dylib也静态链接到具有相同函数ABC的相同静态库A.
现在主应用程序在运行时使用dlopen加载xyz.dylib。调用初始化程序,我调用了ABC函数。从主应用程序的地址空间调用此函数ABC。这真的很奇怪,我不知道,出了什么问题?虽然它应该从dylib调用ABC函数。