MinGw 4.7.0 不使用 #include < boost/线程编译代码>

MinGw 4.7.0 doesnt compile code with #include <boost/thread>

本文关键字:boost 线程 编译 gt 代码 lt MinGw #include      更新时间:2023-10-16

MinGw 4.7.0 Boost 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:softides_compmingwincludeboost_1_47_0  -c      D:workcpp_cbmt1main.cpp -o objDebugmain.o

它不编译,我有相同的错误,无论我尝试编译器选项。

警告:
In file included from C:softides_compmingwincludeboost_1_47_0/boost/thread/win32/thread_data.hpp:12:0, from C:softides_compmingwincludeboost_1_47_0/boost/thread/thread.hpp:15, from C:softides_compmingwincludeboost_1_47_0/boost/thread.hpp:13, from D:workcpp_cbmt1main.cpp:2: C:softides_compmingwincludeboost_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:softides_compmingwincludeboost_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:softides_compmingwincludeboost_1_47_0/boost/smart_ptr/shared_ptr.hpp:30:0, from C:softides_compmingwincludeboost_1_47_0/boost/shared_ptr.hpp:17, from C:softides_compmingwincludeboost_1_47_0/boost/date_time/time_clock.hpp:17, from C:softides_compmingwincludeboost_1_47_0/boost/thread/thread_time.hpp:9, from C:softides_compmingwincludeboost_1_47_0/boost/thread/win32/thread_data.hpp:10, from C:softides_compmingwincludeboost_1_47_0/boost/thread/thread.hpp:15, from C:softides_compmingwincludeboost_1_47_0/boost/thread.hpp:13, from D:workcpp_cbmt1main.cpp:2:

C:softides_compmingwincludeboost_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:softides_compmingwincludeboost_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:softides_compmingwincludeboost_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:softides_compmingwincludeboost_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:softides_compmingwincludeboost_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:softides_compmingwincludeboost_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:softides_compmingwincludeboost_1_47_0/boost/exception/detail/exception_ptr.hpp:161:32: required from here

警告2:
C:softides_compmingwincludeboost_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]

会是什么呢?由于

在以后的boost版本中已经修复了这个问题。检查:

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

更新提升/config/stdlib/libstdcpp3.hpp:

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

增加了_GLIBCXX_HAS_GTHREADS和/或WIN32(从上面的链接,见补丁)。

WIN32似乎有点蛮力,但没有(至少不适合我)。

如果您编译了使用Win32线程的线程库,您可能需要

-DBOOST_USE_WINDOWS_H

中的编译器标志。虽然我不认为这是问题(我得到一组不同的错误不使用它),你可以给它一个尝试。

这个答案可能不是很直接,但是:我用的是g++ 4.7.0 20111209,它支持线程。

#include <iostream>
#include <thread>
using namespace std;
void foo()
{
    cout << "Hello from threadn";
}
int main()
{
    thread th1(foo);
    th1.join();
    return 0;
}

在编译过程中使用-std=c++11选项来使用支持线程的最新标准

PS:在我的PC上用mingw 4.7.0编译的Boost 1.48给出了一个错误(当试图使用Boost::thread时):线程支持不可用:它已被BOOST_DISABLE_THREADS显式禁用所以我猜它在g++ 4.7.0中是默认禁用的(在g++ 4.6.2中没有)。