如果在Linux Ubuntu中包含boost / thread,则不编译:)10.10

时间:2011-03-22 10:30:06

标签: c++ linux boost compiler-errors

我在linux UBUNTU下工作eclipse 10.10,使用Synaptic pkg管理器安装了boost-dev软件包1.40。我是linux新手,这可以提升pkg。我尝试创建一个新项目,然后写:

#include <boost/thread.hpp>
int main(int argc, char* argv[]){
}

我没有包含任何东西或在任何地方写任何像pthread。 在尝试构建时,它说:

/usr/include/boost/config/requires_threads.hpp:47: error: #error "Compiler threading support is not turned on. Please set the correct command line options for threading: -pthread (Linux), -pthreads (Solaris) or -mthreads (Mingw32)"
In file included from /usr/include/boost/thread/thread.hpp:12,
                 from /usr/include/boost/thread.hpp:13,
                 from ../main.cpp:8:
/usr/include/boost/thread/detail/platform.hpp:67: error: #error "Sorry, no boost threads are available for this platform."
In file included from /usr/include/boost/thread.hpp:13,
                 from ../main.cpp:8:
/usr/include/boost/thread/thread.hpp:19: error: #error "Boost threads unavailable on this platform"

等等,还有很多与boost相关的错误。 我尝试将-pthread-pthreads-lpthread添加到我认为可以的位置,但没有解决问题。 我忘了提到,我尝试在eclipse中构建项目,我不在命令行中工作,但我也尝试了g ++ -pthread main.cpp并且它给出了完全相同的错误。 请提供详细或stepbystep解决方案,因为您在这里回答的一些内容对我来说只是中文。我只是想让一个简单的东西运行,甚至不理解这个问题。甚至不理解该错误信息,它希望我做什么。 基本上我做了什么:安装eclipse,在新项目中编写上述内容,使用sinaptic pkg manager安装libboost 1.4,然后重新启动所有内容并尝试编译。我收到了错误。不要看到发生了什么,或者我错过了什么。 (我有libc-dev) Stack现在真的流了过来。需要一些睡眠才能降温。谢谢你们的帮助!

4 个答案:

答案 0 :(得分:11)

这个问题是一个众所周知的问题来自这样一个旧版本的提升。您正在使用gcc / g ++ 4.7进行编译,其中对pthreads的引用已更改为GLIBCXX_HAS_GTHREADS,因此boost无法找到pthread并禁用它。

所以你有两个选择:

1)将boost_dev升级到最后一个版本(我认为它固定在1.50 +)。

2)修补你的提升包含文件(我已经完成了这个);只需编辑

“你的提升文件夹”/include/config/stdlib/libstdcpp3.hpp

并改变:

#ifdef __GLIBCXX__ // gcc 3.4 and greater:
#  if defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
        || defined(_GLIBCXX__PTHREADS)
      //
      // If the std lib has thread support turned on, then turn it on in Boost
      // as well.  We do this because some gcc-3.4 std lib headers define _REENTANT
      // while others do not... 
      //
#     define BOOST_HAS_THREADS
#  else
#     define BOOST_DISABLE_THREADS
#  endif

在条件中添加新指令:

#ifdef __GLIBCXX__ // gcc 3.4 and greater:
#  if defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
        || defined(_GLIBCXX__PTHREADS) \
        || defined(_GLIBCXX_HAS_GTHREADS) // gcc 4.7 
      //
      // If the std lib has thread support turned on, then turn it on in Boost
      // as well.  We do this because some gcc-3.4 std lib headers define _REENTANT
      // while others do not...  
      //
#     define BOOST_HAS_THREADS
#  else
#     define BOOST_DISABLE_THREADS
#  endif

这里对linux和windows的错误描述和修复:

https://svn.boost.org/trac/boost/ticket/6165

享受。

答案 1 :(得分:6)

#include <boost/thread.hpp>

int main(int argc, char *argv[]) {
    return 0;
}

使用g++ test.cpp -pthread -lboost_thread进行编译。

答案 2 :(得分:3)

您需要安装boost线程库:

sudo apt-get install libboost-thread-dev

答案 3 :(得分:2)

正如错误消息所示:将-pthread传递给编译器:

g++ -pthread yourfile.cpp

另外,对于debian,请确保已安装libc-dev