创建使用Boost ASIO而不公开它的静态库
Creating static library that uses Boost ASIO and does not expose it
我正在尝试创建一个使用Boost ASIO (UDP多播,异步)的库,并且不暴露它。基本上我遵循异步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
};
您不能像您所示的那样在库和应用程序之间更改类的定义;这将导致应用程序和库对对象的大小不一致,从而在尝试初始化这些对象时导致缓冲区溢出。
如果您想隐藏对象的私有实现,请使用pImpl习惯用法,并且根本不向应用程序公开实现类
相关文章:
- cmake如何在fedora工作站中找到boost静态库包
- 基于boost的程序的静态链接——zlib问题
- 如何在 Linux for Windows 上通过 MinGW 构建静态 ICU 的 Boost
- Linux Mint 19 上的 CMake 3.11 无法找到静态的 Boost 库
- Boost.Python 在静态库方面失败
- "非静态数据成员之前需要构造函数" - 我是否使用"boost::variant"
- 链接到 Boost 1.63 静态库时未定义的引用
- boost::system::generic_category 静态链接后未定义
- 静态链接再次链接boost.test和cmake在Windows上的mingw
- boost::bind 无法绑定到纯虚拟基类中定义的非静态函数模板成员类型
- 从静态库使用 Boost Asio 时访问冲突异常
- Boost Logger静态链接:不起作用
- 如何将 boost.build 项目链接到特定的静态库
- 在静态库中使用Boost会导致应用程序包含Boost
- Boost::log 使用静态工厂方法
- 如何使用 boost::bind 将静态成员函数绑定到 boost::function
- 使用boost库在Visual Studio 2010中编译完整的静态可执行文件
- boost::信号与来自静态成员函数的参数
- 是静态boost::wregex实例线程安全的
- 初始化静态boost::unordered_map