програма с нишка за усилване 1.51 не се изгражда

Опитвам се да компилирам програма, използвайки нишка за усилване с най-новата версия. Използвам

gcc версия 4.1.2 20080704 (Red Hat 4.1.2-52)

С 1.50 имах проблем, че препратката към boost::thread::~thrad() не може да бъде намерена. Така че актуализирах до новия, който получих следното

      /usr/local/include/boost/thread/detail/thread.hpp:65: error: expected ';' before 'thread_data'
      /usr/local/include/boost/thread/detail/thread.hpp:68: error: expected `;' before 'thread_data'
      /usr/local/include/boost/thread/detail/thread.hpp:88: error: expected ';' before 'thread_data'
      /usr/local/include/boost/thread/detail/thread.hpp:91: error: expected `;' before 'void'
      /usr/local/include/boost/thread/detail/thread.hpp:105: error: expected ';' before 'thread_data'
      /usr/local/include/boost/thread/detail/thread.hpp:108: error: expected `;' before 'void'
      /usr/local/include/boost/thread/detail/thread.hpp:121: error: expected ';' before 'private'
      /usr/local/include/boost/thread/detail/thread.hpp:153: error: expected primary-expression before ')' token
      /usr/local/include/boost/thread/detail/thread.hpp:153: error: there are no arguments to 'BOOST_THREAD_RV_REF' that depend on a template parameter, so a declaration of 'BOOST_THREAD_RV_REF' must be available
      /usr/local/include/boost/thread/detail/thread.hpp:153: error: (if you use '-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)
      /usr/local/include/boost/thread/detail/thread.hpp:153: error: expected `)' before 'f'
      /usr/local/include/boost/thread/detail/thread.hpp:153: error: invalid in-class initialization of static data member of non-integral type 'boost::detail::thread_data_ptr'
      /usr/local/include/boost/thread/detail/thread.hpp:153: confused by earlier errors, bailing out

Нямах представа защо се прави по този начин. Има ли някакво решение?


person Abruzzo Forte e Gentile    schedule 22.08.2012    source източник
comment
Сигурни ли сте, че това е недефинирана препратка към boost::thread::~thrad(), а не boost::thread::~thread()? Освен това можете ли да дадете минимален пример, който има този проблем.   -  person Mankarse    schedule 22.08.2012
comment
Това ми прилича малко на това, че се опитвате да компилирате с неконфигурирано дърво за източник на усилване...   -  person PlasmaHH    schedule 22.08.2012
comment
Свързахте ли се с библиотеката boost_thread (т.е. поставихте -lboost_thread в командния ред на gcc)?   -  person Mike Seymour    schedule 22.08.2012
comment
да, правя връзка срещу библиотеката. Преди се изграждаше правилно до 1.49.0   -  person Abruzzo Forte e Gentile    schedule 23.08.2012
comment
@PlasmaHH: как да проверите тази ситуация на неконфигурирано дърво на източника на усилване   -  person Abruzzo Forte e Gentile    schedule 23.08.2012


Отговори (1)


Имах същия проблем с g++ 4.2.1 на OSX, въпреки че не мисля, че това е проблем на компилатора сам по себе си.

Преди това бях инсталирал библиотеки за усилване и заглавки, инсталирани на /usr/local/lib и /usr/local/include чрез извикване на b2 install. Това работи при нова инсталация, но не презаписва правилно предишна усилваща инсталация (имах 1.49). Всичко, което трябваше да направя, беше да насоча моята компилация към директорията на boost build, която използвах, или да изтрия /usr/local/include/boost и да стартирам b2 install отново. Първият път, когато стартирах b2 install, той копира само libs, което беше бързо, вторият път отне много повече време и копира всички заглавни файлове.

person user1661176    schedule 10.09.2012
comment
Здравейте (връщам се със закъснение, за да благодаря). След като се борих малко, нещо в моята локална инсталация се обърка (включително някакъв неочакван свързан файл). Накрая реших да преинсталирам boost от нулата и всичко се получи. Благодаря за съветите - person Abruzzo Forte e Gentile; 16.01.2013