如何定义自定义Mac OS X框架/动态库的可选入口点?

时间:2011-06-01 14:13:34

标签: c++ macos dll frameworks entry-point

在Windows中有一个 DllMain DLL_PROCESS_ATTACH / DLL_PROCESS_DETACH 标志,允许在 DLL 之后初始化/释放资源strong>附加到进程...那么如果 OS X ,如何指定入口点?与往常一样,我在Apple文档中找不到任何有用的东西:(

4 个答案:

答案 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函数。