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