升压1.49 / 1.50 / 1.51 ASIO转换错误,MinGW& GCC 4.7.0

时间:2012-09-13 10:53:57

标签: c++ boost boost-asio mingw32 gcc4.7

我在boost :: asio中收到一些奇怪的错误,只是包含asio.hpp头文件,然后包含其他标头,直到win_static_mutex.ipp,它会在其中产生转换错误。

我使用带有GCC 4.7的MinGW和-std = gnu ++ 11编译器标志(参见here为什么选择gnu ++ 11而不是c ++ 11)。升压发生在升压1.49,1.50和1.51(电流)中。

完整的错误内容如下:

In file included from boost1.49/boost/asio/detail/win_static_mutex.hpp:71:0,
                 from boost1.49/boost/asio/detail/static_mutex.hpp:23,
                 from boost1.49/boost/asio/detail/impl/signal_set_service.ipp:24,
                 from boost1.49/boost/asio/detail/signal_set_service.hpp:210,
                 from boost/asio/signal_set_service.hpp:19,
                 from boost/asio/basic_signal_set.hpp:24,
                 from boost/asio.hpp:26,
                 from MyCode\Client.cpp:3:
boost1.49/boost/asio/detail/impl/win_static_mutex.ipp: In member function 'int boost::asio::detail::win_static_mutex::do_init()':
boost1.49/boost/asio/detail/impl/win_static_mutex.ipp:51:63: error: invalid conversion from 'const wchar_t*' to 'size_t {aka unsigned int}' [-fpermissive]
boost1.49/boost/asio/detail/impl/win_static_mutex.ipp:51:63: error: invalid conversion from 'unsigned int' to 'const wchar_t*' [-fpermissive]
boost1.49/boost/asio/detail/impl/win_static_mutex.ipp:53:10: warning: declaration of 'mutex' shadows a global declaration [-Wshadow]

正如我在开始时所说的,我在我的代码中做的唯一事情就是包含asio.hpp标题:

#include <boost/asio.hpp>

来自提升 win_static_mutex.ipp文件的第43-53行(我已标记第51行):

  using namespace std; // For sprintf.
  wchar_t mutex_name[128];
#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) && !defined(UNDER_CE)
  swprintf_s(mutex_name, 128,
#else // BOOST_WORKAROUND(BOOST_MSVC, >= 1400) && !defined(UNDER_CE)
  swprintf(mutex_name,
#endif // BOOST_WORKAROUND(BOOST_MSVC, >= 1400) && !defined(UNDER_CE)
      L"asio-58CCDC44-6264-4842-90C2-F3C545CB8AA7-%u-%p",
      static_cast<unsigned int>(::GetCurrentProcessId()), this); // line 51

  HANDLE mutex = ::CreateMutexW(0, TRUE, mutex_name);

现在是否需要定义一些定义或任何其他编译器标志,或者需要在boost中直接更改某些内容,还是需要更改MinGW?

2 个答案:

答案 0 :(得分:0)

这似乎是Boost中的一个错误。您可以尝试将Boost更新到更高版本(1.51可用)并希望它已修复,否则您应该将其报告为错误。

答案 1 :(得分:0)

一个丑陋的“解决方案”是设置编译器标志-fpermissive。 目前我只看到这个“解决方案”,需要等到再次升级GCC 4.7.0 ...