我正在尝试从Visual Studio 2010构建cpp-netlib库但是出现以下链接器错误:
错误LNK2019:未解析的外部符号“bool __cdecl 提高::网络:: URI ::详细:: parse_uri_impl(类 boost :: iterator_range,class std :: allocator> > &安培;,结构 boost :: network :: uri :: detail :: uri_parts_default_base&,struct 提高::网络::标签:: default_string)” (?parse_uri_impl @细节@ URI @网络@ @@升压YA_NAAV?$ @ iterator_range的V'$ _ String_const_iterator @ DU?$ char_traits @ d @ @@ STD V'$分配器@ d @ @@ 2 STD @@@ 4 @ AAUuri_parts_default_base @ 1234 @ Udefault_string @标记@ 34 @@ Z) 在函数“bool __cdecl中引用 提高::网络:: URI ::详细:: parse_uri,类 std :: allocator&gt ;, struct 升压::网络:: HTTP ::标签:: http_default_8bit_tcp_resolve>(类 的std :: basic_string的,类 std :: allocator> &安培;,结构 boost :: network :: uri :: detail :: uri_parts&)“ (?? $ parse_uri @ V'$ basic_string的@ DU?$ char_traits @ d @ @@ STD V'$分配器@ d @ @@ 2 STD @@ @ Uhttp_default_8bit_tcp_resolve标签@ HTTP @网络@升压@@@细节@ URI @网络@升压@@ YA_NAAV?$ @的basic_string杜?$ @ char_traits @ d @@性病V'$ @分配器@ d @@ 2性病@@ AAU?$ @ uri_parts @ Uhttp_default_8bit_tcp_resolve标签@ HTTP // @网升压@@@ 0123 @@ Z)
有点挖掘,这可能与我使用的Boost版本(1.46.1)有关,但我尝试对1.47.0和1.45.0进行编译并得到相同的错误。< / p>
让这个库编译需要什么?
答案 0 :(得分:3)
经过大量搜索,我发现this帖子和this来自图书馆的创建者,提到:
- 关闭所需外部库以与宏链接的选项(BOOST_NETWORK_NO_LIB)。用这个宏定义之前 任何cpp-netlib头都包含在(或在命令行上) 在命名空间中创建extern或只是自由函数的函数 级别标记为“内联”并将其定义拉入 因此,在每个翻译单位。这解决了Jeff Garland的问题 和其他人在使用时需要外部库 cpp-netlib,它始终只有标题,直到0.9。我仍然 挣扎于制作仅头部行为的想法 默认,但我没有嫁给“默认的外部库” 决定。
醇>
如果我在cpp-netlib标题之前添加宏定义,我可以编译,如下所示:
#define BOOST_NETWORK_NO_LIB
#include <boost/network/protocol/http/client.hpp>
在第二篇文章中,我发现还提到“你需要构建/链接uri库”,听起来这可能是一个更好的解决方案。
不幸的是,我对c ++和boost的了解不是最好的,所以我只是选择了有效的方法。
欢迎任何更好的方法,尽管我真正想做的就是编译库以便我可以对它进行实际评估,所以我现在很开心。