从动态加载的库中记录日志

时间:2018-06-24 20:12:58

标签: c++ windows dll spdlog

我有一个C ++桌面应用程序,可以使用'spdlog'库(https://github.com/gabime/spdlog)记录消息。现在,我想使用来自动态加载的DLL的同一记录器。但是,当我尝试从DLL使用spdlog时,会崩溃。

如何设置动态加载的DLL以使用与主应用程序相同的记录器?

1 个答案:

答案 0 :(得分:0)

我发现了问题的可能原因。

spdlog是仅标头。如果您有两个日志副本,一个在您的应用程序中,一个在您的dll中,并且将动态引用从应用程序的spdlog副本传递到dll的副本,并且使用不同的选项编译了应用程序和dll,则可以结束带有两个不兼容的spdlog类函数定义。

特定的冒犯选项:

/Gd     Uses the __cdecl calling convention (x86 only).
/GR     Enables run-time type information (RTTI).
/Gr     Uses the __fastcall calling convention (x86 only).
/Gv     Uses the __vectorcall calling convention. (x86 and x64 only)
/vmm    Declares multiple inheritance.
/vms    Declares single inheritance.
/vmv    Declares virtual inheritance.
/vmb    Uses best base for pointers to members.
/vmg    Uses full generality for pointers to members.
/Zp     Packs structure members.

每个选项都会更改正在处理的文件中每个声明的解释。因此,违反了一个定义规则,以未定义的行为作为惩罚。

相关问题