我正在 Linux 下使用 C++ 开发一个共享库,我希望这个库使用 log4cxx 进行日志记录。但是,我不确定如何设置。为了让 log4cxx 工作,我需要创建一个记录器对象。如何确保在加载库时创建该对象?
我怀疑最简单的方法是将记录器对象创建为全局变量,然后从我的库的任何源文件中使用它,并在标头中将其声明为 extern。但是,一旦应用程序连接到库,如何自动创建记录器呢?
我知道在 Windows 的 DLL 中,有一个 REASON_FOR_CALL == PROCESS_ATTACH; Linux下有类似的东西吗?
在Linux下的C++中,一旦加载库,全局变量就会自动构造。所以这可能是最简单的方法。
如果您需要在加载库时调用任意函数,请使用 GCC 的构造函数属性:
__attribute__((constructor)) void foo(void) {
printf("library loaded!\n");
}
加载库时,动态链接器会调用构造函数。这实际上就是C++全局初始化的实现方式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)