gpt4 book ai didi

c++ - Boost 日志和动态加载的库

转载 作者:行者123 更新时间:2023-12-03 07:03:30 42 4
gpt4 key购买 nike

我们在适用于 Windows 和 Linux 的应用程序中使用 Boost.Log v2 (1.70)。最近我重构了一个动态加载的 dll 来使用 Boost.Log。
dll 导出 C api 函数以访问专用硬件。它用于各种编程环境:C、C++、Python、Delphi 和 Labview。 (其中大多数不使用 Boost.Log)。
对于 Windows,dll 构建为仅使用静态库并使用静态运行时,从而使部署更加容易。
这按预期工作:两个提升日志实例似乎完全相互独立。
应用程序登录到它的文件接收器,dll 进入另一个接收器。
在 Linux 上,该插件被构建为使用共享运行时和共享 boost 库。我们故意这样做是为了能够使用 Linux 发行版的 boost 库。
效果是插件加载后应用程序不再登录到它的接收器。我们看到的是来自插件的日志。
由于 api dll 不知道可能还有其他人也在使用 Boost.Log(== 相同的实例),因此它在记录重新配置时调用 boost::log::core::get()-> remove_all_sinks()。
是否有可能走类似的路线(如在 Windows 中)并尝试使用静态链接和静态运行时构建插件?
或者这种方法注定要失败?
虽然目前正在工作,但使用静态运行时 + 静态链接 Boost.Log 是否是适用于 Windows 的可行构建配置?
提前致谢,
冈瑟

最佳答案

在多个模块(可执行和/或共享库)中使用 Boost.Log 的静态库是 not supported并且不会按预期工作。 Boost.Log 在内部维护了许多单例,在一个进程中有多个 Boost.Log 实例会破坏这些单例。

关于c++ - Boost 日志和动态加载的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64551392/

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