Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从静态库使用Boost Asio时发生访问冲突异常_C++_Boost_Boost Asio - Fatal编程技术网

C++ 从静态库使用Boost Asio时发生访问冲突异常

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::

我有一个静态库,它使用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::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;
}