加载/卸载时由共享库执行的代码

Tib*_*ibi 3 c++ dll shared-libraries

是否可以在加载(或卸载)库时立即执行的共享库(Windows 上的 .dll 和 linux 上的 .so)中创建函数?

就像 main() 函数是可执行文件的入口点一样,我可以定义一个函数在加载或卸载 DLL 时执行吗?

例如:

void _atstart()
{
    // Initialize some stuff needed by the library
}

void _atexit()
{
    // Release some allocated resources
}
Run Code Online (Sandbox Code Playgroud)

我想我在某处看到过这样的例子,但我再也找不到了,并且在互联网上找不到任何关于此的信息。

如果它有任何用处,我正在用 MinGW 编译代码。

unk*_*ulu 5

在 C++ 中,您至少可以创建某个类的全局实例

class ResourceHolder {
public:
    ResourceHolder() {
        // at start
    }

    ~ResourceHolder() {
        // at exit
    }
};

ResourceHolder theHolder;
Run Code Online (Sandbox Code Playgroud)

但是,如果您在库中使用另一个全局变量,则需要一些意识。