ヘッダーファイルを単にインクルードすると、boost::asio 内から奇妙なエラーが発生します。これには、変換エラーが発生するasio.hpp
まで他のヘッダーが含まれます。win_static_mutex.ipp
-std=gnu++11 コンパイラ フラグを指定して GCC 4.7 で MinGW を使用します ( c++11 ではなく gnu++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>
ブーストの ファイルの43 ~ 53 行目は次のwin_static_mutex.ipp
とおりです (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で変更する必要があるものですか?