2013-02-24 15 views
11

के खिलाफ कैसे लिंक करें मैं सी ++ प्रोजेक्ट के लिए लाइब्रेरी सीपीपी-नेटलिब का उपयोग करना चाहता हूं। इसलिए मैंने होमब्री की मदद से बूस्ट लाइब्रेरी स्थापित की है (ओएस मैक ओएस एक्स 10.8 है)। फिर मैंने प्रोजेक्ट होमपेज से सीपीपी-नेटलिब डाउनलोड किया, जी ++ के लिए मेकफ़ाइल बनाने के लिए सेमेक का इस्तेमाल किया और सफलतापूर्वक लागू किया। "परीक्षण करें" अपने सभी परीक्षणों को पारित कर दिया। फिर मैंने बूस्ट निर्देशिका में सीपीपी-नेटलिब के फ़ोल्डर को शामिल किया।सीपीपी-नेटलिब

तो यहां जब समस्या शुरू हुई: मैंने प्रलेखन के पहले उदाहरण 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

सीपीपी-netlib निर्माण (> = 0.9.3) वहाँ होना चाहिए 3 स्थिर पुस्तकालयों के बाद:

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

जब अपने http-ग्राहक परियोजना के निर्माण, आप सीपीपी-netlib के लिए एक पुस्तकालय पथ निर्दिष्ट करना चाहिए (- एल) और लाइब्रेरी (-l) से लिंक करने के लिए: cppnetlib-uri और libcppnetlib-client-connections

+2

धन्यवाद आपके लिए उदाहरण आखिरकार काम कर रहा है! अगर किसी के पास एक ही समस्या है: यहां वह रेखा है जो (अतिरिक्त 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

0

यदि किसी के पास दृश्य स्टूडियो के साथ एक ही समस्या है, तो लिंकर को लाइब्रेरी इनपुट प्रदान करें।

प्रोजेक्ट के गुण> लिंकर> इनपुट>

libcppnetlib-client-connectionsd.lib 
libcppnetlib-urid.lib 
डीबग विन्यास के लिए

और

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

रिलीज विन्यास के लिए।

लाइब्रेरी पथ यहाँ निर्दिष्ट करें,

प्रोजेक्ट के गुण> लिंकर> सामान्य> अतिरिक्त निर्देशिका में शामिल

2

यहाँ क्या मेरे लिए काम किया है। आपको बढ़ावा देने के विभिन्न संस्करणों, विभिन्न इंस्टॉल पथों आदि से निपटने के लिए कुछ हिस्सों को संशोधित करने की आवश्यकता होगी।

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 शामिल करने के लिए की आवश्यकता होगी कल्पना।