Sev*_*yev 22 c++ shared-libraries shared-objects
在*nix .so库中,是否有一个入口点在系统加载和卸载时由系统调用?
更实际的说明:如果.so是用C++编写的,它包含带有构造函数和析构函数的全局对象,并且它是从没有构造/破坏概念的语言加载的,那么全局对象是否正确构造/破坏了?
Ale*_*ohn 12
不,没有相当于DllMain的东西.
对于JNI库,例如在Android上,可能有一个特殊的条目JNI_OnLoad,用于填充JNI函数表.
GCC定义了特殊的属性构造函数,允许一些代码在共享库加载时运行.
C++保证无论加载.so的代码是否知道这些类,或者具有构造的概念,都将执行全局和静态对象的构造函数.
对于析构函数也是如此,但是当至少有一些析构函数没有机会运行时可能会出现不愉快的情况 - 例如,当存在sigfault且异常被禁用时.