gpt4 book ai didi

c++ - 如何在 Linux 上初始化共享库

转载 作者:IT王子 更新时间:2023-10-28 23:56:14 27 4
gpt4 key购买 nike

我正在 Linux 下使用 C++ 开发一个共享库,我希望这个库使用 log4cxx 来进行日志记录。但是,我不确定如何设置它。为了使 log4cxx 正常工作,我需要创建一个记录器对象。如何确保在加载我的库时创建此对象?

我怀疑最简单的方法是将记录器对象创建为全局变量,然后从我的库的任何源文件中使用它,并在 header 中将其声明为 extern。但是,一旦应用程序连接到库,我怎样才能自动创建记录器呢?

我知道在 Windows 的 DLL 中,有一个 REASON_FOR_CALL == PROCESS_ATTACH; Linux下有没有类似的东西?

最佳答案

在 Linux 下的 C++ 中,全局变量将在库加载后立即自动构建。所以这可能是最简单的方法。

如果您需要在加载库时调用任意函数,请使用 GCC 的构造函数属性:

__attribute__((constructor)) void foo(void) {
printf("library loaded!\n");
}

构造函数在加载库时由动态链接器调用。这实际上就是 C++ 全局初始化的实现方式。

关于c++ - 如何在 Linux 上初始化共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1681145/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com