[英]Access violation exception when using socketio-client-c++ and boost asio io_service
[英]Access violation exception when using Boost Asio from a static library
我有一個靜態庫,該庫使用Boost Asio庫(1.61.0版)。 該庫具有一個帶有以下構造函數的Client類:
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_);
}
並具有一些回調方法和一個init()方法:
int Client::init() {
resolver_ = std::make_shared <boost::asio::ip::tcp::resolver>(*io_service_);
resolver_->async_resolve({ host_, boost::lexical_cast<std::string>(port_) }, std::bind(&Client::resolveHandler, this, std::placeholders::_1, std::placeholders::_2));
return 0;
}
當我在測試程序中鏈接到該庫並實例化一個Client,然后調用它的init方法時,該程序將在Boost中的以下位置引發訪問沖突異常(win_mutex.cpp,第50行):
// 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;
}
如果我將客戶端代碼直接編譯為可執行文件,則不會發生此問題。
誰能告訴我在這種情況下如何正確使用Boost Asio庫? 該程序必須在Windows上運行,因此,我將不勝感激此OS的解決方案。
您可以在此處下載源代碼和VS2015解決方案: https ://drive.google.com/open?id = 0ByS95lLWpDcQeTYtSGdmLXVoTGc
通過在靜態庫的“ Client.h”頭文件中包含“ targetver.h”來解決。 如果在創建Visual Studio項目時選中“預編譯”頭,則會自動生成此文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.