【问题标题】:Boost log working on W10 but not in ubuntu - segmentation faultBoost 日志在 W10 上工作但不在 ubuntu 中 - 分段错误
【发布时间】:2021-11-26 04:25:18
【问题描述】:

在使用 Visual Studio 2019 在 W10 上测试 Boost.log 后,我尝试使用适用于 Linux 的 Windows 子系统在 ubuntu 中运行相同的应用程序(编写一个简单的日志文件)。

因此,我使用相同的源文件创建了一个新项目,将其配置为使用 GCC 在 WSL 上构建,并向链接器指示要在 WSL 上查找的 boost 库。

起初,我遇到很多链接错误,例如“未定义对 boost::log::v2s_mt_posix 的引用...”添加后消失了 #define BOOST_LOG_DYN_LINK 1 此处建议:linker error while linking boost log tutorial (undefined references)

这样我就可以开始使用 VS 进行调试,但最终在此函数中调用 logging::add_common_attributes() 时出现“分段错误”

void LOG_InitLogging()
{
    logging::register_simple_formatter_factory<logging::trivial::severity_level, char>( "Severity" );

    logging::add_file_log(
        keywords::file_name = "s.log", //output file
        keywords::format = "[%TimeStamp%] [%LineID%] [%ThreadID%] [%ProcessID%] [%Severity%] ",
        keywords::auto_flush = true
    );

    logging::add_common_attributes();
}

我不太熟悉 linux 或链接库,因此非常感谢一些指导。

谢谢!

【问题讨论】:

  • 您发布的代码没有明显错误,所以我猜问题出在其他地方。请发布完整的简短重现,其中包含编译器选项和崩溃的回溯。
  • @AndreySemashev 在您发表评论后,我试图再次重现该问题,但没有发生。就像魔术一样。但是,有一个解释。我在 VS 上包含了在我的 Windows 系统中提升标头的路径,因此 IntelliSense 不会显示那些红色下划线(在我可以为此目的的地方阅读)。最终我删除了那条路径,这是我发帖后的唯一区别。刚刚测试再次使用路径并得到分段错误。

标签: c++ boost windows-subsystem-for-linux boost-log


【解决方案1】:

在 VS 项目中,尽管正确指示链接器(配置属性 => 链接器 => 输入 => 附加依赖项)以在 WSL 上查找 boost 库,但我还包括(配置属性 => C/C++ => 常规=> Additional Include 目录)我的 Windows 系统上的 boost 标头的路径,因此 IntelliSense 不会显示那些红色下划线(我已经阅读了我可以为此目的做的地方)。

删除 Windows 增强标头的路径后,分段错误不再发生。

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
  • 我同意评论 cmets。我认为您提出了一个很好的问题,您的经验和答案可能会在将来对其他人有所帮助,但是如果您可以提供更多详细信息,那就太好了。听起来您是在说您在 Linux/WSL 项目中有 Windows 标头,但这并不是很清楚,尤其是对于阅读此书但没有相同水平的 WSL 理解的人。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-25
  • 2020-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-28
相关资源
最近更新 更多