Linux equivalent of DllMain

Linux equivalent of DllMain

本文关键字:DllMain of equivalent Linux      更新时间:2023-10-16

在 *nix .so 库中,是否有系统在加载和卸载库时调用的入口点?

更实际的一点是:如果 .so 是用 C++ 编写的,并且它包含带有构造函数和析构函数的全局对象,并且它是从没有构造/破坏概念的语言加载的,那么全局对象是否正确构造/破坏?

您可以使用

__attribute__((constructor))__attribute__((destructor))在加载和卸载共享库时执行代码。

  1. 不,没有等同于 DllMain。

  2. 对于 JNI 库,例如在 Android 上,可能会有一个特殊的条目JNI_OnLoad用于填充 JNI 函数表。

  3. GCC 定义了特殊的属性构造函数,以允许某些代码在共享库加载上运行。

  4. C++保证将执行全局和静态对象的构造函数,无论加载 .so 的代码是否知道这些类,或者是否具有构造的概念。

    析构函数

    也是如此,但当至少某些析构函数没有机会运行时,可能会出现不愉快的情况 - 例如,当存在 sigfault 并且异常被禁用时。

使用的技术略有不同,但全局对象的构建/破坏或多或少内置于动态加载程序。 (即使在Windows下,也无需通过 DllMain . 全局对象将被正确构造/销毁反正。