не компилируется, если включен boost / thread в linux Ubuntu:) 10.10 - PullRequest
5 голосов
/ 22 марта 2011

Я работаю в eclipse под linux UBUNTU :) 10.10, установил пакеты boost-dev 1.40 с помощью диспетчера Synaptic pkg. Я новичок в Linux, и это повышение pkg. Я пытаюсь создать новый проект и пишу:

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

Я нигде ничего не включал и не писал ничего подобного. при попытке построить пишет:

/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"

и так далее, много других ошибок, связанных с бустом. Я попытался добавить -pthread, -pthreads, -lpthread туда, где я думал, что смогу, но не решил проблему. Я забыл упомянуть, что я пытаюсь построить проект в Eclipse, я не работаю в командной строке, но я также пробовал g ++ -pthread main.cpp, и он выдает точно такую ​​же ошибку. Пожалуйста, дайте подробное или пошаговое решение, потому что некоторые вещи, на которые вы отвечаете, для меня просто китайские. Я просто хочу запустить простую вещь и даже не понимаю проблемы. Даже не понимаю это сообщение об ошибке, что он хочет, чтобы я сделал. в основном то, что я сделал: установил eclipse, запишу все вышеперечисленное в новом проекте, установил libboost 1.4 с помощью sinaptic pkg manager, перезапустил все и попытался скомпилировать. Я получил ошибку. Не вижу, что происходит, или что мне не хватает. (У меня есть libc-dev) Стек действительно течет сейчас. нужно немного поспать, чтобы остыть. спасибо ребята за помощь!

Ответы [ 4 ]

11 голосов
/ 18 января 2013

Эта проблема хорошо известна из такой старой версии Boost. Вы компилируете с помощью gcc / g ++ 4.7, где ссылка на pthreads изменилась на GLIBCXX_HAS_GTHREADS, поэтому boost не может найти pthreads и отключить его.

Итак, у вас есть два варианта:

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

Наслаждайтесь.

6 голосов
/ 22 марта 2011
#include <boost/thread.hpp>

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

Компилировать с g++ test.cpp -pthread -lboost_thread.

3 голосов
/ 14 марта 2013

Вам необходимо установить библиотеки потоков поддержки:

sudo apt-get install libboost-thread-dev
2 голосов
/ 22 марта 2011

Как говорится в сообщении об ошибке: передайте -pthread компилятору:

g++ -pthread yourfile.cpp

Также, для Debian, убедитесь, что у вас установлен libc-dev.

...