编译cpp-netlib v0.9时出现无法解决的外部符号错误

Unresolved external symbol error when compiling cpp-netlib v0.9

本文关键字:解决 外部 符号 错误 v0 cpp-netlib 9时 编译      更新时间:2023-10-16

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

错误LNK2019:未解析的外部符号"bool __cdecluri boost:::::::: parse_uri_impl(类Boost::iterator_range,类std::allocator>> &ampuri boost:::::::: uri_parts_default_base和结构boost::网络:标签: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中引用uri boost:::::::: parse_uri、类std::分配器>、结构boost:::: http::标签::http_default_8bit_tcp_resolve>(类std:: basic_string类Std::allocator> &ampuri boost::::::细节:uri_parts和):"basic_string@DU ?美元($ parse_uri@V ? 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进行编译,并得到相同的错误。

需要什么来编译这个库?

经过大量的搜索,我找到了这篇文章,这篇文章来自库的创建者,提到:

  1. 一个选项,用于关闭与宏(BOOST_NETWORK_NO_LIB)链接的所需外部库。使用前面定义的这个宏任何cpp-netlib头文件都包含(或在命令行上)在命名空间中成为外部函数或只是自由函数的函数级别被标记为"内联",并将其定义拉入相应地在每个翻译单元中。这是针对杰夫·加兰的而其他人则担心使用时需要外部库Cpp-netlib在0.9之前一直是头文件。我仍然纠结于将仅标头行为设置为a的想法默认的,但我没有嫁给"默认的外部库"决定。

如果我在我的cpp-netlib头文件之前添加宏定义,我就可以编译了,像这样:

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

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

不幸的是,我对c++和boost的了解不是最好的,所以我只是用了有用的。

任何更好的方法都是受欢迎的,尽管我真正想做的是编译这个库,这样我就可以在实际使用中对它进行评估,所以我现在很高兴。