2013-02-24 63 views
11

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

所以这里是什么时候开始出现问题: 我试图编译文档的第一个例子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 

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

非常感谢!

回答

9

建设CPP-NETLIB(> = 0.9.3)应该有3个静态库后:

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

当构建HTTP客户端的项目,你应该指定CPP-NETLIB 库路径( - L)和库链接(-1)针对:cppnetlib-urilibcppnetlib-client-connections

+2

感谢你,这个例子现在终于在工作了!万一有人有同样的问题:这里是(编译后的附加库)终于奏效了对我行: G ++ TEST.CPP -o出来-I在/ usr /本地/库/升压/ 1.53。 0/-L包括在/ usr /本地/库/升压/ 1.53.0/lib目录-lboost_system-MT -lboost_filesystem-MT -lboost_thread-MT -lcppnetlib客户端的连接-lcppnetlib-URI -lcppnetlib服务器的解析器-lssl - lcrypto – user1462040 2013-02-24 22:47:23

0

万一有人有与Visual Studio相同的问题,提供库输入到链接。

项目属性>链接>输入>

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

用于调试配置和

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

用于发布配置。

在此处指定库路径,

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

2

这里是我工作。您需要修改某些部分以处理不同版本的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