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?$ _ St​​ring_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 ヘッダーがインクルードされる前に (またはコマンド ラインで) このマクロが定義されると、extern に作成された関数、または名前空間レベルで関数を解放するだけの関数は「インライン」とマークされ、それに応じて各翻訳単位にその定義が取り込まれます。これは、cpp-netlib が 0.9 まで常にヘッダーのみであった場合、cpp-netlib を使用するときに外部ライブラリが必要であるという Jeff Garland およびその他の人々の懸念に対処します。私はまだヘッダーのみの動作をデフォルトにするという考えに取り組んでいますが、「デフォルトとして外部ライブラリ」の決定にも同意していません。

次のように cpp-netlib ヘッダーの前にそのマクロ定義を追加すると、コンパイルできます。

#define BOOST_NETWORK_NO_LIB

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

私が見つけた2番目の投稿では、「uriライブラリに対してビルド/リンクする必要がある」という言及もあり、これはより良い解決策のように思えます。

残念ながら、C++ とブーストに関する私の知識は最高ではないので、うまくいったものを使用しました。

より良いアプローチは大歓迎ですが、実際に使用するためにライブラリを評価できるようにライブラリをコンパイルすることだけが本当にやりたかったので、今は満足しています。

于 2011-07-15T11:57:22.750 に答える