使用Boost源代码的链接器错误

Linker Errors using Boost Sourcecode

本文关键字:错误 链接 Boost 源代码 使用      更新时间:2023-10-16

我有一个无法摆脱的问题。我有一个小的私人项目,我想使用asio网络通信和boost线程。我不想在我的机器上安装boost,所以我在我的项目中集成了源代码。为此,我创建了一个包含boost线程和asio的全局标头,如下所示:

#include "boost/asio.hpp"
#include "boost/thread.hpp"

这样我可以毫无问题地构建静态库,但共享库或可执行文件会导致链接器错误:

error LNK2019: unresolved external symbol "private: bool __cdecl boost::thread::join_noexcept(void)" (?join_noexcept@thread@boost@@AEAA_NXZ) referenced in function "public: void __cdecl boost::thread::join(void)" (?join@thread@boost@@QEAAXXZ)
error LNK2019: unresolved external symbol "class boost::thread::id __cdecl boost::this_thread::get_id(void)" (?get_id@this_thread@boost@@YA?AVid@thread@2@XZ) referenced in function "public: void __cdecl boost::thread::join(void)" (?join@thread@boost@@QEAAXXZ)
error LNK2019: unresolved external symbol "public: class boost::thread::id __cdecl boost::thread::get_id(void)const " (?get_id@thread@boost@@QEBA?AVid@12@XZ) referenced in function "public: void __cdecl boost::thread::join(void)" (?join@thread@boost@@QEAAXXZ)
error LNK2019: unresolved external symbol "private: bool __cdecl boost::thread::do_try_join_until_noexcept(unsigned __int64,bool &)" (?do_try_join_until_noexcept@thread@boost@@AEAA_N_KAEA_N@Z) referenced in function "private: bool __cdecl boost::thread::do_try_join_until(unsigned __int64)" (?do_try_join_until@thread@boost@@AEAA_N_K@Z)
error LNK2019: unresolved external symbol "public: void __cdecl boost::thread::interrupt(void)" (?interrupt@thread@boost@@QEAAXXZ) referenced in function "public: __cdecl NetworkAdapter::~NetworkAdapter(void)" (??1NetworkAdapter@@QEAA@XZ)
error LNK2019: unresolved external symbol "public: bool __cdecl boost::thread::joinable(void)const " (?joinable@thread@boost@@QEBA_NXZ) referenced in function "public: __cdecl NetworkAdapter::~NetworkAdapter(void)" (??1NetworkAdapter@@QEAA@XZ)

到目前为止,在项目中使用boost作为源的当前配置是:

#define BOOST_SYSTEM_SOURCE
#define BOOST_DATE_TIME_NO_LIB
#define BOOST_REGEX_NO_LIB
#define BOOST_THREAD_DYN_LINK
#define BOOST_THREAD_DYN_DLL
#define BOOST_THREAD_BUILD_DLL
#define BOOST_CHRONO_HEADER_ONLY
#define BOOST_DATE_TIME_NO_LIB

如果没有此配置,链接器请求*。Lib文件的线程,chrono等。根据boost主页线程和Asio是头只有,那么为什么链接器寻找lib,缺少符号-而不是使用头?那么我做错了什么呢?

欣赏每一个提示:-)

最诚挚的问候,丹

来自boost threading网站

提振。线程依赖于一些非头文件库。

提振。System:此依赖项是强制性的,您需要链接和图书馆一起。提振。Chrono:这个依赖项是可选的(见下文)如何配置),你将需要与库链接,如果你使用一些与时间相关的接口。提振。DateTime:这依赖是强制性的,但即使Boost。DateTime是一个非参数仅头文件库Boost。线程只使用头文件的部分,所以原则上你不需要链接到库。

所以你错了-它不仅仅是头。

相关文章: