MinGw 4.7.0 не компилирует код с помощью #include <boost / thread> - PullRequest
3 голосов
/ 24 ноября 2011

MinGw 4.7.0 Повышение 1.47
код:

#include <iostream>
#include <boost/thread.hpp>
int main(int argc, char *argv[])
{
std::cout<<"In main"<<std::endl;
}

Строка компилятора:

g++.exe -Wall -fexceptions  -g    -IC:\soft\ides_comp\mingw\include\boost_1_47_0  -c      D:\work\cpp_cb\mt1\main.cpp -o obj\Debug\main.o

Он не компилируется, и у меня одинаковая ошибка, какие бы опции компилятора я ни пробовал.

Внимание:
In file included from C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/thread/win32/thread_data.hpp:12:0, from C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/thread/thread.hpp:15, from C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/thread.hpp:13, from D:\work\cpp_cb\mt1\main.cpp:2: C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/thread/win32/thread_heap_alloc.hpp:59:40: warning: inline function 'void* boost::detail::allocate_raw_heap_memory(unsigned int)' declared as dllimport: attribute ignored [-Wattributes] C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/thread/win32/thread_heap_alloc.hpp:69:39: warning: inline function 'void boost::detail::free_raw_heap_memory(void*)' declared as dllimport: attribute ignored [-Wattributes]

Ошибка:
In file included from C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/smart_ptr/shared_ptr.hpp:30:0, from C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/shared_ptr.hpp:17, from C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/date_time/time_clock.hpp:17, from C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/thread/thread_time.hpp:9, from C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/thread/win32/thread_data.hpp:10, from C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/thread/thread.hpp:15, from C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/thread.hpp:13, from D:\work\cpp_cb\mt1\main.cpp:2:

C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/checked_delete.hpp: In instantiation of 'void boost::checked_delete(T*) [with T = boost::error_info<boost::tag_original_exception_type, const std::type_info*>]':


C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/smart_ptr/detail/shared_count.hpp:95:13: required from 'boost::detail::shared_count::shared_count(Y*) [with Y = boost::error_info<boost::tag_original_exception_type, const std::type_info*>]' C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/smart_ptr/shared_ptr.hpp:183:50: required from 'boost::shared_ptr<T>::shared_ptr(Y*) [with Y = boost::error_info<boost::tag_original_exception_type, const std::type_info*>; T = boost::error_info<boost::tag_original_exception_type, const std::type_info*>]' C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/exception/info.hpp:171:69: required from 'const E& boost::exception_detail::set_info(const E&, const boost::error_info<Tag, T>&) [with E = boost::unknown_exception; Tag = boost::tag_original_exception_type; T = const std::type_info*]' C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/exception/info.hpp:192:46: required from 'typename boost::enable_if<boost::exception_detail::derives_boost_exception<E>, const E&>::type boost::operator<<(const E&, const boost::error_info<Tag, T>&) [with E = boost::unknown_exception; Tag = boost::tag_original_exception_type; T = const std::type_info*; typename boost::enable_if<boost::exception_detail::derives_boost_exception<E>, const E&>::type = const boost::unknown_exception&]' C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/exception/detail/exception_ptr.hpp:182:13: required from 'void boost::unknown_exception::add_original_type(const E&) [with E = std::exception]' C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/exception/detail/exception_ptr.hpp:161:32: required from here

Предупреждение 2:
C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/checked_delete.hpp:34:5: warning: deleting object of polymorphic class type 'boost::error_info<boost::tag_original_exception_type, const std::type_info*>' which has non-virtual destructor might cause undefined behaviour [-Wdelete-non-virtual-dtor]

Что это может быть? Спасибо

Ответы [ 3 ]

2 голосов
/ 17 сентября 2012

Это было исправлено в более поздних версиях буста. Проверьте здесь:

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

Обновление boost / config / stdlib / libstdcpp3.hpp:

#if defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
    || defined(_GLIBCXX_HAS_GTHREADS) \
    || defined(_GLIBCXX__PTHREADS) \
    || defined(WIN32)

Добавлены _GLIBCXX_HAS_GTHREADS и / или WIN32 (по ссылке выше, см. Патч).

WIN32 выглядит немного грубо, но без него не работает (по крайней мере, не для меня. Я использую более старую версию Boost 1.42).

1 голос
/ 24 ноября 2011

Если вы скомпилировали библиотеку потоков для использования потоков Win32, вам может потребоваться

-DBOOST_USE_WINDOWS_H

в флагах вашего компилятора. Хотя я не думаю, что это проблема (я получаю другой набор ошибок из-за того, что я его не использую), вы можете попробовать.

0 голосов
/ 19 декабря 2011

Этот ответ может быть не очень прямым, но: я использую g ++ 4.7.0 20111209, и он поддерживает потоки.

#include <iostream>
#include <thread>

using namespace std;

void foo()
{
    cout << "Hello from thread\n";
}

int main()
{
    thread th1(foo);
    th1.join();
    return 0;
}

Во время компиляции используйте опцию -std = c ++ 11, чтобы использоватьпоследний стандарт, поддерживающий потоки

PS: boost 1.48, скомпилированный на моем компьютере с mingw 4.7.0, выдает ошибку (при попытке использовать boost :: thread): поддержка потоков недоступна: она была явно отключена с помощью BOOST_DISABLE_THREADS.Я предполагаю, что это было отключено по умолчанию с g ++ 4.7.0 (с g ++ 4.6.2 это не было).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...