0

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

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

4

1 回答 1

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.

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

于 2018-06-24T20:34:54.290 回答