boost.asioを使用するプログラムをコンパイルしようとすると、奇妙なエラーが発生します。私はちょうどそれをダウンロード/ライブラリをコンパイルしたので、その間にエラーがあったでしょうか?エラーが少し長くに行くCygwinでのasioエラーの改善
In file included from /usr/local/include/boost/asio/async_result.hpp:18:0,
from /usr/local/include/boost/asio.hpp:20,
from test.cpp:27:
/usr/local/include/boost/asio/detail/config.hpp:566:5: warning: #warning Please define _WIN32_WINNT or _WIN32_WINDOWS appropriately. [-Wcpp]
# warning Please define _WIN32_WINNT or _WIN32_WINDOWS appropriately.
^
/usr/local/include/boost/asio/detail/config.hpp:567:5: warning: #warning For example, add -D_WIN32_WINNT=0x0501 to the compiler command line. [-Wcpp]
# warning For example, add -D_WIN32_WINNT=0x0501 to the compiler command line.
^
/usr/local/include/boost/asio/detail/config.hpp:568:5: warning: #warning Assuming _WIN32_WINNT=0x0501 (i.e. Windows XP target). [-Wcpp]
# warning Assuming _WIN32_WINNT=0x0501 (i.e. Windows XP target).
^
/usr/local/include/boost/asio/detail/config.hpp:592:5: error: #error You must add -D__USE_W32_SOCKETS to your compiler options.
# error You must add -D__USE_W32_SOCKETS to your compiler options.
^
In file included from /usr/local/include/boost/asio/detail/impl/posix_tss_ptr.ipp:24:0,
from /usr/local/include/boost/asio/detail/posix_tss_ptr.hpp:76,
from /usr/local/include/boost/asio/detail/tss_ptr.hpp:27,
from /usr/local/include/boost/asio/detail/call_stack.hpp:20,
from /usr/local/include/boost/asio/impl/handler_alloc_hook.ipp:19,
from /usr/local/include/boost/asio/handler_alloc_hook.hpp:80,
from /usr/local/include/boost/asio/detail/handler_alloc_helpers.hpp:21,
from /usr/local/include/boost/asio/detail/bind_handler.hpp:19,
from /usr/local/include/boost/asio/detail/wrapped_handler.hpp:18,
from /usr/local/include/boost/asio/io_service.hpp:24,
from /usr/local/include/boost/asio/basic_io_object.hpp:19,
from /usr/local/include/boost/asio/basic_socket.hpp:20,
from /usr/local/include/boost/asio/basic_datagram_socket.hpp:20,
from /usr/local/include/boost/asio.hpp:21,
from test.cpp:27:
/usr/local/include/boost/asio/error.hpp:87:31: error: a function call cannot appear in a constant-expression
BOOST_ASIO_NATIVE_ERROR(ERROR_BROKEN_PIPE),
^
/usr/local/include/boost/asio/error.hpp:140:31: error: a function call cannot appear in a constant-expression
BOOST_ASIO_NATIVE_ERROR(ERROR_OUTOFMEMORY),
^
/usr/local/include/boost/asio/error.hpp:145:31: error: a function call cannot appear in a constant-expression
BOOST_ASIO_NATIVE_ERROR(ERROR_ACCESS_DENIED),
^
/usr/local/include/boost/asio/error.hpp:153:31: error: a function call cannot appear in a constant-expression
BOOST_ASIO_NATIVE_ERROR(ERROR_BAD_UNIT),
^
/usr/local/include/boost/asio/error.hpp:164:31: error: a function call cannot appear in a constant-expression
BOOST_ASIO_NATIVE_ERROR(ERROR_OPERATION_ABORTED),
^
/usr/local/include/boost/asio/error.hpp:178:31: error: a function call cannot appear in a constant-expression
BOOST_ASIO_NATIVE_ERROR(ERROR_RETRY),
^
In file included from /usr/local/include/boost/asio/detail/socket_types.hpp:38:0,
from /usr/local/include/boost/asio/detail/impl/winsock_init.ipp:22,
from /usr/local/include/boost/asio/detail/winsock_init.hpp:125,
from /usr/local/include/boost/asio/io_service.hpp:28,
from /usr/local/include/boost/asio/basic_io_object.hpp:19,
from /usr/local/include/boost/asio/basic_socket.hpp:20,
from /usr/local/include/boost/asio/basic_datagram_socket.hpp:20,
from /usr/local/include/boost/asio.hpp:21,
from test.cpp:27:
/usr/include/w32api/winsock2.h:1004:68: error: conflicting declaration of C function ‘int gethostname(char*, int)’
WINSOCK_API_LINKAGE int WSAAPI gethostname(char *name,int namelen);
^
In file included from /usr/include/wchar.h:4:0,
from /usr/lib/gcc/x86_64-pc-cygwin/5.3.0/include/c++/cwchar:44,
from /usr/lib/gcc/x86_64-pc-cygwin/5.3.0/include/c++/bits/postypes.h:40,
from /usr/lib/gcc/x86_64-pc-cygwin/5.3.0/include/c++/iosfwd:40,
from /usr/lib/gcc/x86_64-pc-cygwin/5.3.0/include/c++/ios:38,
from /usr/lib/gcc/x86_64-pc-cygwin/5.3.0/include/c++/ostream:38,
from /usr/lib/gcc/x86_64-pc-cygwin/5.3.0/include/c++/iostream:39,
from test.cpp:26:
/usr/include/sys/unistd.h:249:6: note: previous declaration ‘int gethostname(char*, size_t)’
int _EXFUN(gethostname, (char *__name, size_t __len));
^
In file included from /usr/local/include/boost/asio/detail/winsock_init.hpp:125:0,
from /usr/local/include/boost/asio/io_service.hpp:28,
from /usr/local/include/boost/asio/basic_io_object.hpp:19,
from /usr/local/include/boost/asio/basic_socket.hpp:20,
from /usr/local/include/boost/asio/basic_datagram_socket.hpp:20,
from /usr/local/include/boost/asio.hpp:21,
from test.cpp:27:
/usr/local/include/boost/asio/detail/impl/winsock_init.ipp: In static member function ‘static void boost::asio::detail::winsock_init_base::startup(boost::asio::detail::winsock_init_base::data&, unsigned char, unsigned char)’:
/usr/local/include/boost/asio/detail/impl/winsock_init.ipp:36:44: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedIncrement(volatile int*)’
if (::InterlockedIncrement(&d.init_count_) == 1)
^
/usr/local/include/boost/asio/detail/impl/winsock_init.ipp:40:45: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedExchange(volatile int*, int)’
::InterlockedExchange(&d.result_, result);
^
/usr/local/include/boost/asio/detail/impl/winsock_init.ipp: In static member function ‘static void boost::asio::detail::winsock_init_base::manual_startup(boost::asio::detail::winsock_init_base::data&)’:
/usr/local/include/boost/asio/detail/impl/winsock_init.ipp:46:44: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedIncrement(volatile int*)’
if (::InterlockedIncrement(&d.init_count_) == 1)
^
/usr/local/include/boost/asio/detail/impl/winsock_init.ipp:48:40: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedExchange(volatile int*, int)’
::InterlockedExchange(&d.result_, 0);
^
/usr/local/include/boost/asio/detail/impl/winsock_init.ipp: In static member function ‘static void boost::asio::detail::winsock_init_base::cleanup(boost::asio::detail::winsock_init_base::data&)’:
/usr/local/include/boost/asio/detail/impl/winsock_init.ipp:54:44: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedDecrement(volatile int*)’
if (::InterlockedDecrement(&d.init_count_) == 0)
^
/usr/local/include/boost/asio/detail/impl/winsock_init.ipp: In static member function ‘static void boost::asio::detail::winsock_init_base::manual_cleanup(boost::asio::detail::winsock_init_base::data&)’:
/usr/local/include/boost/asio/detail/impl/winsock_init.ipp:62:40: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedDecrement(volatile int*)’
::InterlockedDecrement(&d.init_count_);
^
/usr/local/include/boost/asio/detail/impl/winsock_init.ipp: In static member function ‘static void boost::asio::detail::winsock_init_base::throw_on_error(boost::asio::detail::winsock_init_base::data&)’:
/usr/local/include/boost/asio/detail/impl/winsock_init.ipp:67:55: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedExchangeAdd(volatile int*, int)’
long result = ::InterlockedExchangeAdd(&d.result_, 0);
^
In file included from /usr/local/include/boost/asio/impl/io_service.hpp:69:0,
from /usr/local/include/boost/asio/io_service.hpp:767,
from /usr/local/include/boost/asio/basic_io_object.hpp:19,
from /usr/local/include/boost/asio/basic_socket.hpp:20,
from /usr/local/include/boost/asio/basic_datagram_socket.hpp:20,
from /usr/local/include/boost/asio.hpp:21,
from test.cpp:27:
/usr/local/include/boost/asio/detail/win_iocp_io_service.hpp: In member function ‘bool boost::asio::detail::win_iocp_io_service::stopped() const’:
/usr/local/include/boost/asio/detail/win_iocp_io_service.hpp:84:49: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedExchangeAdd(volatile int*, int)’
return ::InterlockedExchangeAdd(&stopped_, 0) != 0;
^
/usr/local/include/boost/asio/detail/win_iocp_io_service.hpp: In member function ‘void boost::asio::detail::win_iocp_io_service::reset()’:
/usr/local/include/boost/asio/detail/win_iocp_io_service.hpp:90:39: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedExchange(volatile int*, int)’
::InterlockedExchange(&stopped_, 0);
^
/usr/local/include/boost/asio/detail/win_iocp_io_service.hpp: In member function ‘void boost::asio::detail::win_iocp_io_service::work_started()’:
/usr/local/include/boost/asio/detail/win_iocp_io_service.hpp:96:46: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedIncrement(volatile int*)’
::InterlockedIncrement(&outstanding_work_);
^
/usr/local/include/boost/asio/detail/win_iocp_io_service.hpp: In member function ‘void boost::asio::detail::win_iocp_io_service::work_finished()’:
/usr/local/include/boost/asio/detail/win_iocp_io_service.hpp:102:50: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedDecrement(volatile int*)’
if (::InterlockedDecrement(&outstanding_work_) == 0)
^
In file included from /usr/local/include/boost/asio/detail/win_iocp_io_service.hpp:310:0,
from /usr/local/include/boost/asio/impl/io_service.hpp:69,
from /usr/local/include/boost/asio/io_service.hpp:767,
from /usr/local/include/boost/asio/basic_io_object.hpp:19,
from /usr/local/include/boost/asio/basic_socket.hpp:20,
from /usr/local/include/boost/asio/basic_datagram_socket.hpp:20,
from /usr/local/include/boost/asio.hpp:21,
from test.cpp:27:
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.hpp: In member function ‘void boost::asio::detail::win_iocp_io_service::schedule_timer(boost::asio::detail::timer_queue<Time_Traits>&, const typename Time_Traits::time_type&, typename boost::asio::detail::timer_queue<Time_Traits>::per_timer_data&, boost::asio::detail::wait_op*)’:
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.hpp:94:45: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedExchangeAdd(volatile int*, int)’
if (::InterlockedExchangeAdd(&shutdown_, 0) != 0)
^
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.hpp: In member function ‘std::size_t boost::asio::detail::win_iocp_io_service::cancel_timer(boost::asio::detail::timer_queue<Time_Traits>&, typename boost::asio::detail::timer_queue<Time_Traits>::per_timer_data&, std::size_t)’:
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.hpp:114:45: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedExchangeAdd(volatile int*, int)’
if (::InterlockedExchangeAdd(&shutdown_, 0) != 0)
^
In file included from /usr/local/include/boost/asio/detail/win_iocp_io_service.hpp:312:0,
from /usr/local/include/boost/asio/impl/io_service.hpp:69,
from /usr/local/include/boost/asio/io_service.hpp:767,
from /usr/local/include/boost/asio/basic_io_object.hpp:19,
from /usr/local/include/boost/asio/basic_socket.hpp:20,
from /usr/local/include/boost/asio/basic_datagram_socket.hpp:20,
from /usr/local/include/boost/asio.hpp:21,
from test.cpp:27:
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp: In member function ‘void boost::asio::detail::win_iocp_io_service::timer_thread_function::operator()()’:
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp:51:63: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedExchangeAdd(volatile int*, int)’
while (::InterlockedExchangeAdd(&io_service_->shutdown_, 0) == 0)
^
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp:56:66: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedExchange(volatile int*, int)’
::InterlockedExchange(&io_service_->dispatch_required_, 1);
^
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp: In member function ‘virtual void boost::asio::detail::win_iocp_io_service::shutdown_service()’:
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp:93:38: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedExchange(volatile int*, int)’
::InterlockedExchange(&shutdown_, 1);
^
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp:102:56: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedExchangeAdd(volatile int*, int)’
while (::InterlockedExchangeAdd(&outstanding_work_, 0) > 0)
^
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp:112:50: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedDecrement(volatile int*)’
::InterlockedDecrement(&outstanding_work_);
^
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp:125:50: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedDecrement(volatile int*)’
::InterlockedDecrement(&outstanding_work_);
^
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp: In member function ‘size_t boost::asio::detail::win_iocp_io_service::run(boost::system::error_code&)’:
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp:153:53: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedExchangeAdd(volatile int*, int)’
if (::InterlockedExchangeAdd(&outstanding_work_, 0) == 0)
^
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp: In member function ‘size_t boost::asio::detail::win_iocp_io_service::run_one(boost::system::error_code&)’:
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp:172:53: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedExchangeAdd(volatile int*, int)’
if (::InterlockedExchangeAdd(&outstanding_work_, 0) == 0)
^
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp: In member function ‘size_t boost::asio::detail::win_iocp_io_service::poll(boost::system::error_code& ’:
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp:187:53: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedExchangeAdd(volatile int*, int)’
if (::InterlockedExchangeAdd(&outstanding_work_, 0) == 0)
^
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp: In member function ‘size_t boost::asio::detail::win_iocp_io_service::poll_one(boost::system::error_code&)’:
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp:206:53: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedExchangeAdd(volatile int*, int)’
if (::InterlockedExchangeAdd(&outstanding_work_, 0) == 0)
^
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp: In member function ‘void boost::asio::detail::win_iocp_io_service::stop()’:
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp:221:41: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedExchange(volatile int*, int)’
if (::InterlockedExchange(&stopped_, 1) == 0)
^
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp:223:53: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedExchange(volatile int*, int)’
if (::InterlockedExchange(&stop_event_posted_, 1) == 0)
^
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp: In member function ‘void boost::asio::detail::win_iocp_io_service::post_deferred_completion(boost::asio::detail::win_iocp_operation*)’:
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp:247:49: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedExchange(volatile int*, int)’
::InterlockedExchange(&dispatch_required_, 1);
^
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp: In member function ‘void boost::asio::detail::win_iocp_io_service::post_deferred_completions(boost::asio::detail::op_queue<boost::asio::detail::win_iocp_operation>&)’:
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp:268:51: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedExchange(volatile int*, int)’
::InterlockedExchange(&dispatch_required_, 1);
^
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp: In member function ‘void boost::asio::detail::win_iocp_io_service::abandon_operations(boost::asio::detail::op_queue<boost::asio::detail::win_iocp_operation>&)’:
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp:279:46: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedDecrement(volatile int*)’
::InterlockedDecrement(&outstanding_work_);
^
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp: In member function ‘void boost::asio::detail::win_iocp_io_service::on_pending(boost::asio::detail::win_iocp_operation*)’:
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp:286:53: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedCompareExchange(volatile int*, int, int)’
if (::InterlockedCompareExchange(&op->ready_, 1, 0) == 1)
^
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp:295:51: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedExchange(volatile int*, int)’
::InterlockedExchange(&dispatch_required_, 1);
^
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp: In member function ‘void boost::asio::detail::win_iocp_io_service::on_completion(boost::asio::detail::win_iocp_operation*, DWORD, DWORD)’:
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp:319:49: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedExchange(volatile int*, int)’
::InterlockedExchange(&dispatch_required_, 1);
^
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp: In member function ‘void boost::asio::detail::win_iocp_io_service::on_completion(boost::asio::detail::win_iocp_operation*, const boost::system::error_code&, DWORD)’:
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp:341:49: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedExchange(volatile int*, int)’
::InterlockedExchange(&dispatch_required_, 1);
^
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp: In member function ‘size_t boost::asio::detail::win_iocp_io_service::do_one(bool, boost::system::error_code&)’:
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp:350:63: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedCompareExchange(volatile int*, int, int)’
if (::InterlockedCompareExchange(&dispatch_required_, 0, 1) == 1)
^
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp:399:57: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedCompareExchange(volatile int*, int, int)’
if (::InterlockedCompareExchange(&op->ready_, 1, 0) == 1)
^
/usr/local/include/boost/asio/detail/impl/win_iocp_io_service.ipp:434:51: error: cannot convert ‘long int*’ to ‘volatile int*’ for argument ‘1’ to ‘int _InterlockedExchange(volatile int*, int)’
::InterlockedExchange(&stop_event_posted_, 0);
:私はGCC、およびプログラム
Windows上のcygwinの使用しています :コンパイルしようと
#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
int main()
{
boost::asio::io_service io;
boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
t.wait();
std::cout << "Hello, world!" << std::endl;
return 0;
}
が私にこのエラーメッセージを表示しますしかし、SOは投稿内の文字数を制限しています
私はこれに固執しており、進める方法がわかりません。どんな助けもありがとう!
編集: 編集:kenbaが提案したようにwindowsフラグを付けてコンパイルしました。しかし、同じエラーが表示され、その警告が上部に表示されません。
おそらく関連があります:私は他のいくつかのBoostライブラリをテストしましたが、問題なく動作しています。問題はasioと思われます。