2013-02-24 18 views
11

karşı bağlantı C++ projesi için Library cpp-netlib kullanmak istiyorum. Bu nedenle destek kütüphanesini homebrew yardımıyla kurdum (OS, Mac OS X 10.8). Daha sonra cpp-netlib'yi proje ana sayfasından indirdim, cmake'yi g + + ve başarılı bir şekilde uygulanan Makefile'yi oluşturmak için kullandım. "Test yap" tüm testlerini geçti. Daha sonra cpp-netlib'nin include klasörünü destek dizinine kopyaladım.Nasıl cpp-netlib

Sorun şu anda başladı: Belgenin ilk örneğini http-client derlemeye çalıştım ama işe yaramaya gelemedim. Ben

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 

kullanıldığında Bunları bağlayıcı hataları aldı:

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 

Gerçekten arama işlevini kullandı ama benim sorun için herhangi bir çözüm bulamadık. Neyi yanlış yapıyorum?

Çok teşekkürler! (> = 0.9.3) orada should 3 statik kütüphanelerini cpp-netlib oluşturduktan sonra

cevap

9

: En http-istemci projesi oluştururken

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

, siz (cpp-netlib için bir kütüphane yolunu belirtmelisiniz - L) ve kütüphanelere (-l) numaralı telefon numaralarını cppnetlib-uri ve libcppnetlib-client-connections numaralı telefonlardan karşılar.

+2

teşekkürler, örnek şu anda çalışıyor! Birisi aynı sorunu varsa: Burada (ek libs derledikten sonra) nihayet benim için hile yaptı hat: g ++ test.cpp-out -I/usr/local/Cellar/boost/1.53. 0/dahil -L/usr/yerel/Cellar/boost/1.53.0/lib -lboost_system-mt -lboost_filesystem-mt -lboost_thread-mt -lcppnetlib-client-bağlantılar -lcppnetlib-uri -lcppnetlib-sunucu-parsers -lssl - lcrypto – user1462040

0

Birisi görsel stüdyosuyla aynı sorunu yaşıyorsa, kitaplık girdisini bağlayıcıya sağlayın. Yayın yapılandırma için

Proje özellikleri> Bağlayıcı> giriş>

libcppnetlib-client-connectionsd.lib 
libcppnetlib-urid.lib 
ayıklama yapılandırma için

ve

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

.

burada Kütüphane yolunu belirtin,

Proje özellikleri> Bağlayıcı> Genel> Ek

İşte
2

benim için çalıştı budur dizinleri içerir. Farklı sürümleri, farklı yükleme yollarını ve benzerlerini ele almak için belirli parçaları değiştirmeniz gerekecektir. Eğer sunucu tarafında kod yazıyorsanız

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 

o zaman da -lcppnetlib-server-parsers eklenmesi gerekmektedir düşünün.