小编典典

如何在Linux上初始化共享库

linux

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

我怀疑将记录器对象创建为全局变量,然后从我的库的任何源文件中使用它,在标头中将其声明为extern,将是最容易的。但是,一旦应用程序连接到库,如何自动创建记录器?

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


阅读 381

收藏
2020-06-07

共1个答案

小编典典

在Linux下的C ++中,加载库后,就会自动构造全局变量。因此,这可能是最简单的方法。

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

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

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

2020-06-07