2017-02-17 196 views
4

我有一个使用boost记录的应用程序。在关机期间,它会在空指针访问时获得访问冲突。当我逐步通过代码到失败点时,看起来boost :: log dll被解除分配,然后boost :: thread代码尝试访问曾经被日志dll占用的内存。Boost线程访问在Boost中的登录冲突登录shutdown

我没有在自己的代码中使用任何boost线程,所以假设boost-thread dll被boost日志使用。

,以确保所有被汇关机前摧毁,我打电话:核心 - >刷新()和核心 - > remove_all_sinks()

我使用升压1.60和还与升压1.63试过这个。同样的结果。

在退出/卸载dll之前,有没有办法确保提升日志记录核心完全关闭?

+0

您是否有发生问题的最小代码示例? –

+0

“Boost.Log不支持插件卸载,因为它可以在内部保存对各种静态数据和代码的引用。” - Boost日志作者。通过避免在我的插件中使用boost日志解决了问题,因为它不支持我的用例。 – JeffV

+0

你的意思是应用程序关闭或系统关闭? – KonstantinL

回答

1

此问题可能与升压系统设置的语言环境对象有关。同样,在你的情况下,在Boost.Log被取消初始化之前,这个区域可能会被破坏,从而导致崩溃。

根据boost文档,特别是日志文件旋转模块。他们提供了类似案例的解决方法Boost known issues

解决方法是初始化主循环中的语言环境,以便升压将有足够的周期进行清理。

int main(int argc, char* argv[]) 
{ 
    boost::filesystem::path::imbue(std::locale("C")); 
    initialize_log(); 

    // ... 
}