1

我正在尝试在 VS2010 - 64bit 上为 Boost Asio 运行以下代码示例。取自链接

#include <boost/asio.hpp> 
#include <boost/array.hpp> 
#include <iostream> 
#include <string> 

boost::asio::io_service io_service; 
boost::asio::ip::tcp::resolver resolver(io_service); 
boost::asio::ip::tcp::socket sock(io_service); 
boost::array<char, 4096> buffer; 

void read_handler(const boost::system::error_code &ec, std::size_t bytes_transferred) 
{ 
    if (!ec) 
    { 
        std::cout << std::string(buffer.data(), bytes_transferred) << std::endl; 
        sock.async_read_some(boost::asio::buffer(buffer), read_handler); 
    } 
} 

void connect_handler(const boost::system::error_code &ec) 
{ 
    if (!ec) 
    { 
        boost::asio::write(sock, boost::asio::buffer("GET / HTTP 1.1\r\nHost: highscore.de\r\n\r\n")); 
        sock.async_read_some(boost::asio::buffer(buffer), read_handler); 
    } 
} 

void resolve_handler(const boost::system::error_code &ec, boost::asio::ip::tcp::resolver::iterator it) 
{ 
    if (!ec) 
    { 
        sock.async_connect(*it, connect_handler); 
    } 
} 

int main() 
{ 
    boost::asio::ip::tcp::resolver::query query("www.highscore.de", "80"); 
    resolver.async_resolve(query, resolve_handler); 
    io_service.run(); 
} 

然后我开始收到以下错误

cannot open file 'libboost_system-vc100-mt-sgd-1_47.lib'
cannot open file 'libboost_date_time-vc100-mt-sgd-1_47.lib'
cannot open file 'libboost_regex-vc100-mt-sgd-1_47.lib'

为了解决这些问题,我从Link下载了这些文件

所以我开始收到以下错误:

Error   12  error LNK1169: one or more multiply defined symbols found   
Error   8   error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMTD.lib(new.obj)   
Error   10  error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) already defined in libcpmtd.lib(newaop.obj)    
Error   9   error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCMTD.lib(dbgdel.obj) 
Error   11  error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPAX@Z) already defined in LIBCMTD.lib(delete2.obj) 

关于可能出现问题的任何建议。我需要在其他依赖项中设置一些输入吗?

4

1 回答 1

0

您可能不需要重新安装 Visual Studio。我认为您看到的错误与一种版本控制问题有关。您收到的错误表明某些组件是使用一组库构建的,而其他组件是使用另一组库构建的。在错误中:

error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMTD.lib(new.obj)   

文件名 LIBCMTD (MTD) 的最后 3 个字符代表多线程库。如果您正在构建将此代码与不同类型的库一起使用的其他组件,例如 MT(多线程 - 无调试)或 MDd(dll 的多线程调试),那么您将收到此错误。如果您链接到错误的 Boost 库集,您也可能会收到此错误。事实上,从它试图使用的库上面的错误来看:

'libboost_system-vc100-mt-sgd-1_47.lib'

我相信这是发布版本。您需要使用您在自己的代码中使用的相同类型的库进行构建。如果您使用的是 MTD,那么也可以使用 MTD 版本的 Boost 库进行构建。

要查看您的项目正在使用哪些库,请右键单击解决方案资源管理器窗口中的项目并选择属性。也可以从项目菜单中选择属性,但在执行此操作之前,请确保该项目中有一个文件作为当前文件在编辑窗口中打开。在运行时库下,您将看到您正在使用的库类型。如果项目类型是 dll,那么这个值真的应该设置为 MDd。要查看它是什么类型的项目,请单击属性下的链接器(或图书管理员)选项,如果输出文件是 dll,则项目类型是 dll。如果它说 library 或 exe,则项目分别是 library 或 exe。给定类型的所有项目都应该以相同的方式构建。例如,您不应该尝试混合和匹配发布和调试版本。如果您有正在构建的 exe,则使用用于构建项目库类型的任何库。要设置库,请在属性下选择配置属性/C/C++/代码生成/运行时库,然后从下拉框中选择一种类型。

如果所有项目的配置看起来都正确,请尝试从头开始重建。这可以通过右键单击项目并选择清理,然后选择重建来完成。

于 2013-03-21T17:03:43.280 回答