如何定义自定义MacOSX框架/动态库的可选入口点
How to define an optional entry point into custom Mac OS X framework / dynamic library?
在Windows中,有一个DllMain和DLL_PROCESS_ATTACH/DLL _PROCESS_DETACH标志,它们允许在DLL附加到进程后初始化/释放资源。。。那么,在OSX的情况下,我如何指定入口点呢?和往常一样,我在苹果文档中找不到任何有用的东西:(
苹果网站上的动态库编程主题文档显示了的使用
__attribute__((constructor))
和
__attribute__((destructor))
在动态库中实现初始化器和终结器。
这样不行吗?
__attribute__((constructor)) void DllMain()
{
// code
}
我认为malkia(upvoted)和Bavariant有正确的答案,但由于我已经查过了:一种方法是设置init例程。在库的Xcode构建设置中查找"初始化例程"。在函数名称前面加一个下划线。即,如果您的init例程名为DllMain,请输入"_DllMain"。
此外,我之前也使用obj-c++进行过一些初始化,比如:
class LibraryInit
{
public LibraryInit()
{
// do some init stuff here
}
} ;
static LibraryInit sLibraryInit();
我的主应用程序通过函数ABC静态链接到静态库a,我的动态库xyz.dlib也静态链接到具有相同函数ABC的相同静态库a。
现在,当主应用程序在运行时使用dlopen加载xyz.dlib时。初始化器在我调用ABC函数的地方被调用。这个函数ABC是从主应用程序的地址空间调用的。这真的很奇怪,我不知道,出了什么问题?尽管它应该从dylib调用ABC函数。
相关文章:
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- C++中的动态铸造故障
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 内联映射初始化的动态atexit析构函数崩溃
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 控制允许动态运行c++的并发操作数
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 输出没有重复元素的动态数组(收缩数组)C++
- C++为线程工作动态地分割例程
- 在 Win 7 SP 中创建 exe vcxproj:过程入口点<function>无法位于动态链接库中KERNAL32.dll
- 过程入口点_ZSt24__throw_out_of_range_fmtPKcz不能位于动态链接库 sfml-graphi
- 在动态链接库libstdc++-6.dll中找不到过程入口点_gxx_personality_v0.错误
- 过程入口点无法在动态链接库中找到-查找错误的DLL
- 在动态链接库libstdc++-6.dll中无法找到过程入口点_gxx_personality_v0
- 程序入口点__gxx_personality_v0无法在动态链接库libstdc++-6.dll中找到
- 无法在动态链接库中找到过程入口点__gxx_personality_v0
- 过程入口点EnumerateLoadedModulesW64不能位于动态链接库dbghelp.dll中
- 如何定义自定义MacOSX框架/动态库的可选入口点