【问题标题】:error : BOOST DISABLE THREADS错误:提升禁用线程
【发布时间】:2012-01-08 00:27:13
【问题描述】:

我的 boost 库有一些问题。我正在使用 freebsd 并使用端口安装了我的 boost。 Boost 版本是:1.45,我使用 g++47 作为编译器。我也从来没有在那儿定义过 BOOST DISABLE THREADS:/usr/local/include/boost/config/user.hpp。我的错误也正是:

 /usr/local/include/boost/config/requires_threads.hpp:29:4: error: #error "Threading    support unavaliable: it has been explicitly disabled with BOOST_DISABLE_THREADS" 

明确但在哪里?还有我的编译命令;

 g++47 -O3 -Wall -std=c++0x   -I. -Iinclude -I../include -I/usr/local/include   -c -o     Application.o src/Application.cpp

谢谢

【问题讨论】:

    标签: c++ boost freebsd


    【解决方案1】:

    实验性 GCC 版本 4.7 禁用了 Boost.Threads。见:https://svn.boost.org/trac/boost/ticket/6165

    编辑:需要注意的是,从 GCC 4.7 的发布版本开始,并且 Boost 高于 1.48(Boost_1_48_0 仍然无法工作),线程再次工作。

    【讨论】:

    • GCC 没有“禁用”任何东西,Boost.Threads 1.47 未能正确检测编译器中的线程支持,因为 Boost 所依赖的未记录的实现细节发生了变化。这也与实验版本和发布版本无关,同样适用于 4.7 的所有版本
    • 有趣,我在 gcc 4.8.1 和 boost 1.55 上遇到了同样的问题 - 除了备份到 4.7 之外,还有其他解决方案吗?
    • GCC 4.8.1 + Boost 1_47 相同的错误。显然,使用未记录的功能来检测某些东西,这在以后的 GCC 版本上不再适用......?
    • 刚刚升级了 Boost。 GCC 4.8.1 + Boost 1_55,同样的错误。
    • @Mike:请参阅上面提到的 Joachim 票证 6165:要定义“线程”支持,GCC = 4.7 定义了“_GLIBCXX_HAS_GTHREADS”。因此,为了使用任何比 4.6 更新的 GCC 编译较旧的 Boost,您需要包含在该票证中的补丁 libstdcpp3.hpp.patch。网址:svn.boost.org/trac/boost/attachment/ticket/6165/…
    【解决方案2】:

    查看上面提到的 Joachim 的票 6165
    要定义“线程”支持,

    • GCC _GLIBCXX__PTHREADS
    • 而 GCC >= 4.7 定义 _GLIBCXX_HAS_GTHREADS
    因此,为了使用任何比 4.6 更新的 GCC 编译较旧的 Boost,您需要该票证中包含的补丁 libstdcpp3.hpp.patch

    另一个也可能阻止 Boost 使用现代编译器的问题是票证 6940TIME_UTC 在 C11 中具有特殊含义,因此 Boost >= 1.50 使用 TIME_UTC_ 代替)

    【讨论】:

    • 这是一个很有帮助的答案,为我节省了大量时间,谢谢!
    猜你喜欢
    • 2012-05-16
    • 2010-10-11
    • 2013-03-05
    • 2014-01-10
    • 1970-01-01
    • 2011-06-08
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多