VS2010 Unresolved External Symbol boost::asio::detail::winsock_init_base::throw_on_error 将 boost-sys

Posted

技术标签:

【中文标题】VS2010 Unresolved External Symbol boost::asio::detail::winsock_init_base::throw_on_error 将 boost-system 与使用 libtorrent 的项目链接时【英文标题】:VS2010 Unresolved External Symbol boost::asio::detail::winsock_init_base::throw_on_error when linking boost-system with a project using libtorrent 【发布时间】:2012-07-02 14:59:49 【问题描述】:

我正在尝试使用 Rasterbar 的 libtorrent 构建一个小型命令行 BitTorrent 客户端,该客户端依赖于 Boost。我已经使用各自的方向构建了 Boost 库和 libtorrent 库,但是当我尝试构建我的项目时,出现以下链接错误

1>------ Build started: Project: MiniBT, Configuration: Debug Win32 ------
1>MiniBT.obj : error LNK2019: unresolved external symbol "protected: static void __cdecl boost::asio::detail::winsock_init_base::throw_on_error(struct boost::asio::detail::winsock_init_base::data &)" (?throw_on_error@winsock_init_base@detail@asio@boost@@KAXAAUdata@1234@@Z) referenced in function "public: __thiscall boost::asio::detail::winsock_init<2,0>::winsock_init<2,0>(bool)" (??0?$winsock_init@$01$0A@@detail@asio@boost@@QAE@_N@Z)
1>MiniBT.obj : error LNK2019: unresolved external symbol "protected: static void __cdecl boost::asio::detail::winsock_init_base::startup(struct boost::asio::detail::winsock_init_base::data &,unsigned char,unsigned char)" (?startup@winsock_init_base@detail@asio@boost@@KAXAAUdata@1234@EE@Z) referenced in function "public: __thiscall boost::asio::detail::winsock_init<2,0>::winsock_init<2,0>(bool)" (??0?$winsock_init@$01$0A@@detail@asio@boost@@QAE@_N@Z)
1>MiniBT.obj : error LNK2019: unresolved external symbol "class boost::system::error_category const & __cdecl boost::asio::error::get_misc_category(void)" (?get_misc_category@error@asio@boost@@YAABVerror_category@system@3@XZ) referenced in function "void __cdecl boost::asio::error::`dynamic initializer for 'misc_category''(void)" (??__Emisc_category@error@asio@boost@@YAXXZ)
1>MiniBT.obj : error LNK2019: unresolved external symbol "unsigned long __cdecl boost::asio::detail::win_tss_ptr_create(void)" (?win_tss_ptr_create@detail@asio@boost@@YAKXZ) referenced in function "public: __thiscall boost::asio::detail::win_tss_ptr<class boost::asio::detail::call_stack<class boost::asio::detail::win_iocp_io_service,unsigned char>::context>::win_tss_ptr<class boost::asio::detail::call_stack<class boost::asio::detail::win_iocp_io_service,unsigned char>::context>(void)" (??0?$win_tss_ptr@Vcontext@?$call_stack@Vwin_iocp_io_service@detail@asio@boost@@E@detail@asio@boost@@@detail@asio@boost@@QAE@XZ)
1>MiniBT.obj : error LNK2019: unresolved external symbol "protected: static void __cdecl boost::asio::detail::winsock_init_base::cleanup(struct boost::asio::detail::winsock_init_base::data &)" (?cleanup@winsock_init_base@detail@asio@boost@@KAXAAUdata@1234@@Z) referenced in function "public: __thiscall boost::asio::detail::winsock_init<2,0>::~winsock_init<2,0>(void)" (??1?$winsock_init@$01$0A@@detail@asio@boost@@QAE@XZ)

这似乎表明 asio::detail 命名空间没有包含在 boost-system 库中,因为它似乎只有这 5 个符号有问题,并且它正在链接到 boost-system 库否则就好了。我正在尝试在 64 位系统上构建 32 位应用程序,但我检查过的所有内容似乎都已正确配置。

我知道我错过了一些东西,但我似乎无法弄清楚是什么。有人有什么建议吗?

【问题讨论】:

尝试定义 BOOST_ASIO_SEPARATE_COMPILATION 我已经尝试了 BOOST_ASIO_SEPARATE_COMPILATION 和 BOOST_ASIO_DYN_LINK 都没有工作。唯一的区别是使用 dyn_link 时,错误包括函数定义前面的 __declspec(dllimport)。 你是如何构建 libtorrent 的?您使用的是哪个版本的 libtorrent?看来您没有链接到 boost.asio 库,该库应该是作为 libtorrent 的一部分构建的,位于 src/asio.cpp 【参考方案1】:

定义了 BOOST_ASIO_SEPARATE_COMPILATION 后,除了 #include "boost/asio/ssl/impl/src.hpp" 之外,您还必须在其中一个 cpp 文件中 #include "boost/asio/impl/src.hpp"。

【讨论】:

以上是关于VS2010 Unresolved External Symbol boost::asio::detail::winsock_init_base::throw_on_error 将 boost-sys的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2010 - 致命错误 LNK1120: 1 unresolved externals; C++

vs2017.unresolved external symbol __imp__fprintf&__imp____iob_func

pycharm解决Unresolved Reference

Unresolved reference ‘SQLAlchemy‘

[Eclipse] - 解决导入flask模块出现的Unresolved Import flask问题

无法规范化地址 localhost/<unresolved>:2222 因为它不可解析