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

如何链接到cpp netlib 我想使用库CPP NETLIB作为C++项目。因此,我在自制的帮助下安装了boost库(操作系统是Mac OS X 10.8)。然后我从项目主页下载了cpp netlib,使用cmake为g++创建Makefile并成功应用make。 “make test”通过了所有测试。然后我将cpp netlib的include文件夹复制到boost目录中,c++,boost,linker,cpp-netlib,C++,Boost,Linker,Cpp Netlib,麻烦开始的时候是这样的: 我试图编译文档的第一个示例,但无法使其正常工作。当我使用 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 x8

麻烦开始的时候是这样的: 我试图编译文档的第一个示例,但无法使其正常工作。当我使用

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
架构x86_64的未定义符号: “boost::network::uri::detail::parse(_gnu_cxx::_normal_迭代器,_gnu_cxx::_normal_迭代器,boost::network::uri::detail::uri_parts&)”,引用自: ccs87Dq3.o中的boost::network::uri::uri::parse() “boost::network::http::impl::normal_delegate::normal_delegate(boost::asio::io_service&)”,引用自: ccs87Dq3.o中的boost::network::http::impl::connection_delegate_factory::new_connection_delegate(boost::asio::io服务&,bool,boost::optional,boost::optional) ld:找不到架构x86_64的符号 collect2:ld返回了1个退出状态 我确实使用了搜索功能,但我找不到任何解决问题的方法。我做错了什么

非常感谢

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

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

在构建http客户端项目时,您应该为cpp netlib(-L)指定库路径,并根据以下库链接(-L)cppnetlib uri
libcppnetlib客户端连接
,以防有人在visual studio中遇到同样的问题,向链接器提供库输入

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

libcppnetlib-client-connectionsd.lib
libcppnetlib-urid.lib
用于调试配置和

libcppnetlib-client-connections.lib
libcppnetlib-uri.lib
用于发布配置

在此处指定库路径


项目属性>链接器>常规>附加包含目录

以下是对我有效的方法。您需要修改某些部分以处理不同版本的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服务器解析器

,多亏了您,示例现在终于可以工作了!如果有人有同样的问题:下面这行代码(在编译额外的libs之后)最后我完成了这个技巧:g++test.cpp-out-I/usr/local/ceral/boost/1.53.0/include-L/usr/local/ceral/boost/1.53.0/lib-lboost_system-mt-lboost_filesystem-mt-lboost_thread-mt-lcppnetlib客户端连接-lcppnetlib uri-lcppnetlib服务器解析器-lssl-lcrypto