Я пытаюсь создать библиотеку, которая использует Boost ASIO (UDP multicast, асинхронный) и не раскрывает ее. По сути, я следую примеру async udp, за исключением того, что я сделал объект io_service статическим закрытым членом библиотеки.
Код работает нормально, если непосредственно скомпилирован в исполняемый файл. Если я попытаюсь создать статическую библиотеку, а затем использовать ее внутри приложения, код создаст исключения при создании моего класса.
Если у кого-то есть примеры или кто-то создал библиотеку, которая использует Boost ASIO, но не предоставляет ее и может прокомментировать, я был бы очень признателен за помощь.
Я также пытался сделать io_service закрытым членом класса, а также попытался передать его конструктору. Все, что я пробовал до сих пор, вызывает исключения.
Вот пример кода для библиотеки:
#ifdef _LIB
static boost::asio::io_service asio_service;
#endif
class udpframereader
{
public:
udpframereader() : m_socket(asio_service)
{
m_packetCount = 0;
...
}
unsigned long long asio_error_count();
...
#ifdef _LIB
private:
void handle_receive(const boost::system::error_code& error, std::size_t bytes_transferred);
boost::asio::ip::udp::socket m_socket;
boost::asio::ip::udp::endpoint m_remote_endpoint;
boost::array<char, 4096> m_buffer;
boost::crc_ccitt_type m_crc;
unsigned long long m_packetCount;
...
#endif
};