2013-02-24 30 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