Повысьте проблему с последовательным портом Asio - PullRequest
0 голосов
/ 16 августа 2011

Я использую CodeBlocks в системах Windows и скачал Boost, соблюдает и настраивает мои переменные IDE и параметры сборки.Я успешно использую другие библиотеки наддува, и теперь мне нужно работать над программой, которая читает и записывает в последовательный порт.

Я не могу получить пример, который я пытаюсь скомпилировать для последовательного порта asio.Следующее, например, сгенерирует ошибку компиляции, которая следует за кодом:

#include <iostream>
#include <boost/asio.hpp>
#include <boost/asio/serial_port.hpp>
#include <boost/thread.hpp>



int main()
{


    boost::asio::io_service io_service;
    boost::asio::serial_port port(io_service);


    return 0;

}

Это журнал сборки для приведенного выше кода:

Compiling: main.cpp
In file included from C:\Dev\boost_1_47_0/boost/thread/win32/thread_data.hpp:12,
                 from C:\Dev\boost_1_47_0/boost/thread/thread.hpp:15,
                 from C:\Dev\boost_1_47_0/boost/thread.hpp:13,
                 from C:\Users\bjune\Documents\CodeBlocks\hellow\main.cpp:4:
C:\Dev\boost_1_47_0/boost/thread/win32/thread_heap_alloc.hpp:59: warning: inline function 'void* boost::detail::allocate_raw_heap_memory(unsigned int)' declared as  dllimport: attribute ignored
C:\Dev\boost_1_47_0/boost/thread/win32/thread_heap_alloc.hpp:69: warning: inline function 'void boost::detail::free_raw_heap_memory(void*)' declared as  dllimport: attribute ignored
C:\Users\bjune\Documents\CodeBlocks\hellow\main.cpp: In function 'int main()':
C:\Users\bjune\Documents\CodeBlocks\hellow\main.cpp:13: error: 'serial_port' is not a member of 'boost::asio'
C:\Users\bjune\Documents\CodeBlocks\hellow\main.cpp:13: error: expected ';' before 'port'
C:\Dev\boost_1_47_0/boost/system/error_code.hpp: At global scope:

Любой совет ??

1 Ответ

3 голосов
/ 17 августа 2011

Из файла boost / asio / serial_port_base.hpp (немного упрощенно):

#if defined(BOOST_ASIO_HAS_IOCP) || !defined(BOOST_WINDOWS)
#  define BOOST_ASIO_HAS_SERIAL_PORT 1
#endif

Так что BOOST_ASIO_HAS_SERIAL_PORT имеет значение true в Windows, только если BOOST_ASIO_HAS_IOCP также имеет значение true.

Затем из boost / asio / detail / win_iocp_io_service_fwd.hpp :

#if defined(BOOST_WINDOWS)
#if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0400)

// Define this to indicate that IOCP is supported on the target platform.
#  define BOOST_ASIO_HAS_IOCP 1
#endif
#endif

Так что, если я правильно понимаю, вам нужно определить _WIN32_WINNT для 0x0400 или вышечтобы включить его.

...