【问题标题】:boost_thread segmentation fault on application start up应用程序启动时的 boost_thread 分段错误
【发布时间】:2013-09-26 19:53:01
【问题描述】:

我正在使用 Eclipse Indigo 在 Ubuntu 12.04 LTS 上使用 OpenCV 2.4.6.1 版本开发图像处理应用程序。我使用 Intel ICC 编译器版本 14。

我需要使用 Boost 中分布的线程库。这样我就成功地用 Intel 编译器编译了 Boost 1.54。

为了使用以下代码进行编译,将 -lboost_thread 开关添加到链接器的标志列表中:

boost::this_thread::sleep_for(oneFrameProcessDuration -(boost::chrono::high_resolution_clock::now() - startTime));

整个应用程序编译成功后。当我开始申请时,

boost::exception_ptr boost::exception_detail::get_static_exception_object<boost::exception_detail::bad_alloc_>() 

抛出异常。即使我无法到达我的主要功能的第一行。

可能是什么问题?

问候。

【问题讨论】:

  • 您确定要链接到正确的 boost 库(实现您的标头的库)吗?在调试器中运行时会得到什么?
  • @boric 我在发布这个帖子之前检查了那个帖子。
  • @walter 我敢肯定,我链接到正确的 boost 库。我认为头文件和库之间没有不一致,因为我链接到 boost_system 库没有任何问题。调试器说程序收到 SIGSEG 分段错误信号,并在原始帖子上抛出异常。
  • 尝试删除代码行直到错误消失,从而创建一个最小的错误版本。

标签: c++ boost eclipse-cdt


【解决方案1】:

我今天遇到了同样的问题。由于这个问题似乎是谷歌上的热门问题并且没有答案,所以这里是:

简单的解决方案:

如果您只需要线程,而不需要锁定和计时等所有其他内容,则可以包含 #include &lt;boost/thread/thread.hpp&gt; 而不是 #include &lt;boost/thread.hpp&gt;。这样链接-lboost_thread就够了,可能还需要-lboost_system,因为我的代码的其他部分也需要它,所以无法测试。

更复杂的:

如果您需要更多,您可能需要链接更多的 boost 库,例如 -lboost_chrono-lboost_date_time。详情请见http://www.boost.org/doc/libs/1_59_0/doc/html/thread/build.html

【讨论】:

    猜你喜欢
    • 2018-01-11
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 2019-05-10
    • 2012-02-12
    • 2021-03-10
    相关资源
    最近更新 更多