2009-02-17 8 views
6

में regex को बढ़ावा देने के लिए लिंकिंग मैं अपने प्रोग्राम को संकलित करने की कोशिश कर रहा हूं जो लिनक्स पर रेगेक्स का उपयोग करता है। मैं libs/regex में बढ़ावा पुस्तकालय बनाया मेकअप -fgcc.mak जो एक निर्देशिका जीसीसी जो निम्नलिखित चार फ़ाइलोंजीसीसी

boost_regex-gcc-1_35 
boost_regex-gcc-d-1_35 
libboost_regex-gcc-1_35.a 
libboost_regex-gcc-d-1_35.a 

शामिल अब मैं अपने कार्यक्रम से regex का उपयोग करना चाहते हैं बनाया लिखकर निर्माण/जो कुछ मनमानी निर्देशिका में है। I # समाहित बूस्ट/regex.hpp

मुझे त्रुटि मिली जो बताती है कि regex.hpp नहीं मिला है। फिर मैंने जी ++ कंपाइलर में -आई विकल्प दिया। मुझे वह त्रुटि नहीं मिली। लेकिन मैं निम्न त्रुटि

undefined reference to `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::construct_init(boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)' 

मैं googled और पाया कि मैं किसी भी तरह मेरे कार्यक्रम के लिए ऊपर 4 पुस्तकालयों में से एक लिंक करने की आवश्यकता हो। मैं यह कैसे कर सकता हूं। मुझे किससे लिंक करना चाहिए और क्यों?

उत्तर

9

या तो अपने लिंक चरण में ऑब्जेक्ट फ़ाइलों की अपनी सूची में libboost_regex-gcc-1_35.a जोड़ें या -static -lboost_regex-gcc-1_35 जोड़ें। यह भी सुनिश्चित करें कि आपके पास -I स्विच आपके पॉइंट पर इंगित करने के लिए आपके संकलन चरण में निर्देशिका शामिल है। पुस्तकालयों विशिष्ट खोज पथ (/usr/lib * nix पर) बाहर हैं, तो g++ के लिए -Wl,-L/path/to/boost/libs या बस -L/path/to/boost/libsld पर के साथ अपने लिंक आदेश है कि निर्देशिका जोड़ें।

0

मुझे बूस्ट फाइल सिस्टम का उपयोग करते समय भी इसी तरह की समस्याओं का सामना करना पड़ा। स्थिर रूप से लिंक करने के लिए मुझे यह करने की आवश्यकता है। मेरे मूल (समस्याग्रस्त) Makefile से

अंश: LIBS = स्थैतिक -lboost_filesystem

समाधान: LIBS = -Wl, -Bstatic -lboost_filesystem -lboost_system -Wl, -Bdynamic

आप देख सकते हैं http://code.google.com/p/neptuner/source/browse/codebase/trunk/stratego/uboat/Makefile

से पूर्ण मेकफ़ाइल इसे ठीक से लिंक करने के लिए boost_system जोड़ने की आवश्यकता है। Libboost * .a के प्रत्यक्ष जोड़/विनिर्देशन और अधिक समस्याएं पैदा की। ध्यान दें- मानक पुस्तकालयों के स्थिर लिंक को रोकने के लिए गतिशील मौजूद है।