C++ 从静态库使用Boost Asio时发生访问冲突异常
我有一个静态库,它使用Boost Asio库(1.61.0版)。此库具有具有以下构造函数的客户端类:C++ 从静态库使用Boost Asio时发生访问冲突异常,c++,boost,boost-asio,C++,Boost,Boost Asio,我有一个静态库,它使用Boost Asio库(1.61.0版)。此库具有具有以下构造函数的客户端类: Client::Client(std::shared_ptr<boost::asio::io_service> io_service_prm, std::string host_prm, int port_prm) : io_service_(io_service_prm), host_(host_prm), port_(port_prm) { socket_ = std::
Client::Client(std::shared_ptr<boost::asio::io_service> io_service_prm, std::string host_prm, int port_prm) : io_service_(io_service_prm), host_(host_prm), port_(port_prm)
{
socket_ = std::make_shared<boost::asio::ip::tcp::socket>(*io_service_);
}
以下是主要功能的代码:
int main()
{
auto io_service = std::make_shared<boost::asio::io_service>();
auto worker = boost::asio::io_service::work(*io_service);
auto host = "localhost";
auto port = 8181;
Client client(io_service, host, port);
client.init();
io_service->run();
return 0;
}
intmain()
{
自动io_服务=std::使_共享();
自动工作者=boost::asio::io_服务::工作(*io_服务);
auto host=“localhost”;
自动端口=8181;
客户端(io_服务、主机、端口);
client.init();
io_服务->运行();
返回0;
}
如果我将客户机代码直接编译到可执行文件中,那么问题就不会发生
有人能告诉我在这种情况下如何正确使用Boost Asio库吗?该程序必须在Windows上运行,因此我非常感谢针对该操作系统的解决方案
您可以在此处下载源代码和VS2015解决方案:
通过在静态库的“Client.h”头文件中包含“targetver.h”来解决。如果您在创建Visual Studio项目时检查预编译标题,则会自动生成此文件。请编辑您的问题,使其包含一段代码,即无需进一步修改即可复制、粘贴和编译的代码。您的问题还缺少重要的细节:(1)访问冲突发生在哪里?(2) 您使用的是哪个boost版本?(3) 如果
Client
不在静态库中,而是直接编译到可执行文件中,是否也会出现问题?您的问题似乎与此类似:
// Lock the mutex.
void lock()
{
--> ::EnterCriticalSection(&crit_section_);
}
int main()
{
auto io_service = std::make_shared<boost::asio::io_service>();
auto worker = boost::asio::io_service::work(*io_service);
auto host = "localhost";
auto port = 8181;
Client client(io_service, host, port);
client.init();
io_service->run();
return 0;
}