12

ライブラリ cpp-netlib を C++ プロジェクトに使用したいと考えています。そのため、homebrew (OS は Mac OS X 10.8) を使用してブースト ライブラリをインストールしました。次に、プロジェクトのホームページから cpp-netlib をダウンロードし、cmake を使用して g++ の Makefile を作成し、make を正常に適用しました。「make test」はすべてのテストに合格しました。次に、cpp-netlib の include フォルダーを boost ディレクトリにコピーしました。

ここで問題が発生しました: ドキュメントの最初のサンプルhttp-clientをコンパイルしようとしましたが、動作しませんでした。私が使用したとき

g++ test.cpp -o out -I/usr/local/Cellar/boost/1.53.0/include 
-L/usr/local/Cellar/boost/1.53.0/lib 
-lboost_system-mt -lboost_filesystem-mt -lboost_thread-mt

次のリンカー エラーを受け取りました。

Undefined symbols for architecture x86_64:
  "boost::network::uri::detail::parse(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::network::uri::detail::uri_parts<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&)", referenced from:
      boost::network::uri::uri::parse()  in ccs87Dq3.o
  "boost::network::http::impl::normal_delegate::normal_delegate(boost::asio::io_service&)", referenced from:
      boost::network::http::impl::connection_delegate_factory<boost::network::http::tags::http_async_8bit_udp_resolve>::new_connection_delegate(boost::asio::io_service&, bool, boost::optional<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::optional<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >)in ccs87Dq3.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

検索機能を実際に使用しましたが、問題の解決策が見つかりませんでした。私は何を間違っていますか?

どうもありがとう!

4

3 に答える 3

9

cpp-netlib (>=0.9.3) をビルドすると、次の 3 つの静的ライブラリが必要になります。

libcppnetlib-client-connections.a
libcppnetlib-server-parsers.a
libcppnetlib-uri.a

http-client プロジェクトをビルドするときは、cpp-netlib のライブラリ パス(-L)とリンクするライブラリ(-l)を指定する必要があります:cppnetlib-uriおよびlibcppnetlib-client-connections.

于 2013-02-24T21:37:56.203 に答える
2

これが私のために働いたものです。さまざまなバージョンのブースト、さまざまなインストール パスなどに対応するには、特定の部分を変更する必要があります。

g++ -o demo \
    demo.cpp \
    -lcppnetlib-uri \
    -lcppnetlib-server-parsers \
    -lcppnetlib-client-connections \
    -lboost_thread-mt \
    -lboost_system-mt \
    -lssl \
    -lcrypto \
    -I/usr/local/include \
    -L/usr/local/lib

サーバー側のコードを書いている場合は、 も含める必要があると思います-lcppnetlib-server-parsers

于 2015-05-25T22:49:42.263 に答える