0

さて、私は先週、Googleでこれに対する解決策を見つけようとし、次のリンクを含む複数のコーディングサイトを検索しました。

http://boost.2283326.n4.nabble.com/boost-asio-UnregisterWaitEx-RegisterWaitForSingleObject-has-not-been-declared-td4633963.html

これが私が使うことを知っていた方法でした

-D_WIN32_WINNT=0x0601 -DWINVER=0x0601

コンパイルラインで。

Dev-C++でWindows7(64ビット)を使用していますが、Boost:Asioの例をコンパイルするたびに次のエラーが発生します。

Compiler: Default compiler
Building Makefile: "D:\Tutorials\Asio\Makefile.win"
Executing  make...
make.exe -f "D:\Tutorials\Asio\Makefile.win" all
g++.exe -c main.cpp -o main.o -I"D:/Programs/Dev-Cpp/lib/gcc/mingw32/3.4.2/include"  -I"D:/Programs/Dev-Cpp/include/c++/3.4.2/backward"  -I"D:/Programs/Dev-Cpp/include/c++/3.4.2/mingw32"  -I"D:/Programs/Dev-Cpp/include/c++/3.4.2"  -I"D:/Programs/Dev-Cpp/include"  -D_WIN32_WINNT=0x0601 -DWINVER=0x0601 -lboost_system-mgw44-mt-1_49  

In file included from D:/Programs/Dev-Cpp/include/boost/asio/detail/win_object_handle_service.hpp:180,
                 from D:/Programs/Dev-Cpp/include/boost/asio/windows/object_handle_service.hpp:24,
                 from D:/Programs/Dev-Cpp/include/boost/asio/windows/basic_object_handle.hpp:27,
                 from D:/Programs/Dev-Cpp/include/boost/asio.hpp:99,
                 from main.cpp:3:
D:/Programs/Dev-Cpp/include/boost/asio/detail/impl/win_object_handle_service.ipp: In member function `void boost::asio::detail::win_object_handle_service::register_wait_callback(boost::asio::detail::win_object_handle_service::implementation_type&, boost::asio::detail::scoped_lock<boost::asio::detail::win_mutex>&)':
D:/Programs/Dev-Cpp/include/boost/asio/detail/impl/win_object_handle_service.ipp:376: error: `RegisterWaitForSingleObject' undeclared (first use this function)
D:/Programs/Dev-Cpp/include/boost/asio/detail/impl/win_object_handle_service.ipp:376: error: (Each undeclared identifier is reported only once for each function it appears in.)

D:/Programs/Dev-Cpp/include/boost/asio/detail/impl/win_object_handle_service.ipp: In static member function `static void boost::asio::detail::win_object_handle_service::wait_callback(void*, BOOLEAN)':
D:/Programs/Dev-Cpp/include/boost/asio/detail/impl/win_object_handle_service.ipp:418: error: `RegisterWaitForSingleObject' undeclared (first use this function)

make.exe: *** [main.o] Error 1

Execution terminated

私のコードは次のとおりです。

#define _WIN32_WINNT 0x0601
#define __USE_W32_SOCKETS
#include <boost/asio.hpp>
#include <iostream>


int main()
{
    // Cre'ation du service principal et du re'solveur.
    boost::asio::io_service ios;
    boost::asio::ip::tcp::resolver resolver(ios);   // (1)              

    // Parame`trage du resolver sur Developpez.com
    boost::asio::ip::tcp::resolver::query query("www.developpez.com", "80"); // (2)

    // On re'cupe`re une "liste" d'ite'rateur
    boost::asio::ip::tcp::resolver::iterator iter = resolver.resolve(query); // (3)
    boost::asio::ip::tcp::resolver::iterator end; //Marqueur de fin
    while (iter != end) // On ite`re le long des endpoints
    {
        boost::asio::ip::tcp::endpoint endpoint = *iter++;
        std::cout << endpoint << std::endl; // on affiche (4)
    }

    return 0;
 }  

コード自体にエラーがないことを考えると、それは問題ではありません。これは、私が取り組んできた5つのチュートリアルの1つにすぎず、Boost:Asioで同じ正確なエラーが発生します。

リンカで「-lwsock32」を使用したり、コンパイラで「-lboost_system-mgw44-mt-1_49」を使用したりするなどの提案がありましたが、何もしませんでした。提案されているように「-D_WIN32_WINNT=0x0601 -DWINVER = 0x0601」を追加すると、いくつかのエラーが削除されましたが、それは私が得た限りです。

私はBoost:Asioをプログラムに実装することに真剣に取り組んでいるので、実用的な例を得ることができれば、さまざまなリソースからそれをよりよく理解し、意図したとおりに使用することができます。したがって、このエラーについて助けを求める他のフォーラムで何度も見たことがあるので、「専門家に任せる」または「プログラムを学ぶ」については何も教えないでください。プログラミングの仕方は知っていますが、なじみのないライブラリを使用すると、このようなエラーが発生します。

前もって感謝します!

4

1 に答える 1

0

追加

#include <windows.h>

ファイルの先頭の s の直後に#define。Boostがwindows.hを含まずにwin32関数を使用しているように見えます。

于 2012-08-26T03:40:22.757 に答える