1

我正在尝试从 Visual Studio 2010 构建cpp-netlib库,但出现以下链接器错误:

错误 LNK2019:未解析的外部符号“bool __cdecl boost::network::uri::detail::parse_uri_impl(class boost::iterator_range,class std::allocator >> &,struct boost::network::uri::detail: :uri_parts_default_base &,struct boost::network::tags::default_string)" (?parse_uri_impl@detail@uri@network@boost@@YA_NAAV?$iterator_range@V?$_String_const_iterator@DU?$char_traits@D@std@@ V?$allocator@D@2@@std@@@4@AAUuri_parts_default_base@1234@Udefault_string@tags@34@@Z) 在函数“bool __cdecl boost::network::uri::detail::parse_uri,class std::allocator >,struct boost::network::http::tags::http_default_8bit_tcp_resolve>(class std::basic_string,class std::allocator > &,struct boost::network::uri::detail::uri_parts &)"(??$parse_uri@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Uhttp_default_8bit_tcp_resolve@tags@http@network@boost@@@detail@uri@ network@boost@@YA_NAAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAU?$uri_parts@Uhttp_default_8bit_tcp_resolve@tags@http@network@boost@@@ 0123@@Z)

一点点挖掘发现这可能与我正在使用的 Boost 版本(1.46.1)有关,但我尝试针对 1.47.0 和 1.45.0 进行编译并得到相同的错误。

编译这个库需要什么?

4

1 回答 1

3

经过大量搜索后,我找到了这篇文章和图书馆创建者的这篇文章,其中提到

  1. 关闭与宏链接所需的外部库的选项 (BOOST_NETWORK_NO_LIB)。在包含任何 cpp-netlib 标头之前(或在命令行上)定义此宏,在命名空间级别生成的函数或只是自由函数被标记为“内联”,并在每个翻译单元中相应地拉入它们的定义。这解决了 Jeff Garland 和其他人对使用 cpp-netlib 时需要外部库的担忧,而在 0.9 之前它一直是仅头文件。我仍在努力考虑将仅标题行为设为默认值,但我也没有接受“默认外部库”的决定。

如果我在我的 cpp-netlib 标头之前添加该宏定义,我可以编译,如下所示:

#define BOOST_NETWORK_NO_LIB

#include <boost/network/protocol/http/client.hpp>

在第二篇文章中,我发现还提到了“您需要针对 uri 库构建/链接”,这听起来可能是一个更好的解决方案。

不幸的是,我对 c++ 和 boost 的了解并不是最好的,所以我只选择了有效的方法。

欢迎任何更好的方法,尽管我真正想做的只是编译库,以便我可以评估它以供实际使用,所以我现在很高兴。

于 2011-07-15T11:57:22.750 回答