问题 如何链接cpp-netlib


我想将库cpp-netlib用于C ++项目。因此我在自制程序的帮助下安装了boost库(操作系统是Mac OS X 10.8)。然后我从项目主页下载了cpp-netlib,使用cmake为g ++创建了Makefile并成功应用了make。 “make test”通过了所有测试。然后我将cpp-netlib的include文件夹复制到boost目录中。

所以这是麻烦开始的时候: 我试着编译文档的第一个例子 HTTP客户端 但无法让它发挥作用。我用的时候

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

我真的使用了搜索功能,但我找不到解决问题的方法。我究竟做错了什么?

非常感谢!


6328
2018-02-24 18:51


起源



答案:


在构建cpp-netlib(> = 0.9.3)之后,应该有3个静态库:

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

构建http-client项目时,应指定cpp-netlib的库路径 (-L) 和图书馆链接 (-1) 反对: cppnetlib-uri 和 libcppnetlib-client-connections


9
2018-02-24 21:37



谢谢你,这个例子现在终于奏效了!万一有人有同样的问题:这里是(在编译额外的libs之后)终于为我做了一招: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 -lcppnetlib-client-connections -lcppnetlib-uri -lcppnetlib-server-parsers -lssl -lcrypto - user1462040


答案:


在构建cpp-netlib(> = 0.9.3)之后,应该有3个静态库:

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

构建http-client项目时,应指定cpp-netlib的库路径 (-L) 和图书馆链接 (-1) 反对: cppnetlib-uri 和 libcppnetlib-client-connections


9
2018-02-24 21:37



谢谢你,这个例子现在终于奏效了!万一有人有同样的问题:这里是(在编译额外的libs之后)终于为我做了一招: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 -lcppnetlib-client-connections -lcppnetlib-uri -lcppnetlib-server-parsers -lssl -lcrypto - user1462040


这对我有用。您需要修改某些部分以处理不同版本的boost,不同的安装路径等。

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


2
2018-05-25 22:49





如果某人遇到与visual studio相同的问题,请向链接器提供库输入。

项目属性>链接器>输入>

libcppnetlib-client-connectionsd.lib
libcppnetlib-urid.lib

用于调试配置和

libcppnetlib-client-connections.lib
libcppnetlib-uri.lib

用于发布配置。

在此处指定库路径,

项目属性>链接器>常规>其他包含目录


0
2018-03-07 05:11