2009-08-20 7 views
5

मैं बूस्ट सीख रहा हूं और मेरी फाइलों के साथ परेशानी हो रही है।फाइल बनाने में बढ़ावा पुस्तकालयों सहित

accesstimer: acctime.o btimer.o 
    g++ acctime.o btimer.o -o accesstimer 

acctime.o: acctime.cpp btimer.h 
    g++ -c acctime.cpp 

bentimer.o: btimer.cpp btimer.h 
    g++ -c btimer.cpp 

जब acctime.cpp इस मीटर में कोई बढ़ावा फाइल सिस्टम तत्व है, शॉट लें फ़ाइल ठीक काम करता है: यहाँ मेरी बुनियादी makefile है। जैसे ही मैं बूस्ट फाइल सिस्टम तत्वों को जोड़ता हूं, मुझे स्पष्ट रूप से मेक फ़ाइल में बूस्ट लाइबेरे के संदर्भों की आवश्यकता होती है, जहां मुझे समस्याएं आ रही हैं।

निम्न पंक्ति एक एकल फाइल संकलन के लिए काम करता है:

g++ -I /usr/local/boost/boost_1_39_0 boosttest1.cpp -o bt1 /usr/local/boost/boost_1_39_0/stage/lib/libboost_filesystem-gcc41-mt.a /usr/local/boost/boost_1_39_0/stage/lib/libboost_system-gcc41-mt.a 

अब मैं कर फाइल में इस एकीकृत करने के लिए कोशिश कर रहा हूँ। मैं कई की कोशिश की है क्या जानकारी मैं वेब पर मिल सकता है के आधार पर, लेकिन कोई भी काम कर रहे हैं यह मेरी नवीनतम है:

accesstimer: acctime.o bentimer.o 
    g++ acctime.o bentimer.o -o accesstimer 

acctime.o: acctime.cpp bentimer.h 
    g++ -c -I /usr/local/boost/boost_1_39_0 acctime.cpp /usr/local/boost/boost_1_39_0/stage/lib/libboost_filesystem-gcc41-mt.a /usr/local/boost/boost_1_39_0/stage/lib/libboost_system-gcc41-mt.a 

bentimer.o: bentimer.cpp bentimer.h 
    g++ -c bentimer.cpp 

दुर्भाग्य से यह stlill नहीं बूस्ट पुस्तकालयों पा सकते हैं, किसी को भी मदद कर सकते हैं? धन्यवाद

लोग हैं, जो उत्तर दिया है मैं अब इस मिल गया है की सलाह को पढ़ने के बाद:

accesstimer: acctime.o bentimer.o 
    g++ -L /usr/local/boost/boost_1_39_0 acctime.o /usr/local/boost/boost_1_39_0/stage/lib/libboost_filesystem-gcc41-mt.a /usr/local/boost/boost_1_39_0/stage/lib/libboost_system-gcc41-mt.a bentimer.o -o accesstimer 

acctime.o: acctime.cpp bentimer.h 
    g++ -c acctime.cpp 

bentimer.o: bentimer.cpp bentimer.h 
    g++ -c bentimer.cpp 

लेकिन यह अभी भी लिंक करने के लिए विफल रहता है।

यह मैं हो रही है त्रुटि संदेश है: (! धन्यवाद बहुत सराहना)

g++ -L /usr/local/boost/boost_1_39_0/stage/lib/libboost_filesystem-gcc41-mt.a /usr/local/boost/boost_1_39_0/stage/lib/libboost_system-gcc41-mt.a acctime.o bentimer.o -o accesstimer 
acctime.o: In function boost::enable_if<boost::filesystem::is_basic_path<boost::filesystem::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> >, bool>::type boost::filesystem::exists<boost::filesystem::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> >(boost::filesystem::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> const&)': 
acctime.cpp:(.text._ZN5boost10filesystem6existsINS0_10basic_pathISsNS0_11path_traitsEEEEENS_9enable_ifINS0_13is_basic_pathIT_EEbE4typeERKS7_[boost::enable_if<boost::filesystem::is_basic_path<boost::filesystem::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> >, bool>::type boost::filesystem::exists<boost::filesystem::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> >(boost::filesystem::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> const&)]+0x26): undefined reference to `boost::filesystem::detail::status_api(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int&)' 
collect2: ld returned 1 exit status 
make: *** [accesstimer] Error 1 

बाद orsogufo की सलाह अब यह है:

accesstimer: acctime.o bentimer.o 
    g++ -L/usr/local/boost/boost_1_39_0/stage/lib -llibboost_filesystem-gcc41-mt.a -llibboost_system-gcc41-mt.a acctime.o bentimer.o -o accesstimer 

acctime.o: acctime.cpp bentimer.h 
    g++ -c acctime.cpp 

bentimer.o: bentimer.cpp bentimer.h 
    g++ -c bentimer.cpp 

बेहतर खोज रहे हैं, लेकिन अभी भी नहीं कर सकते हैं काफी लाइब्रेरी पाएं:

g++ -L/usr/local/boost/boost_1_39_0/stage/lib -llibboost_filesystem-gcc41-mt.a -llibboost_system-gcc41-mt.a acctime.o bentimer.o -o accesstimer 
/usr/bin/ld: cannot find -llibboost_filesystem-gcc41-mt.a 
collect2: ld returned 1 exit status 
make: *** [accesstimer] Error 1 

मैंने उस स्थान को दो बार चेक किया है और लाइब्रेरी निश्चित रूप से है: /usr/local/boost/boost_1_39_0/stage/lib/libboost_filesystem-gcc41-mt.a

अभी भी कोई खुशी, अब यह usimg:

accesstimer: acctime.o bentimer.o 
    g++ -L/usr/local/boost/boost_1_39_0 -lboost_filesystem-gcc41-mt acctime.o bentimer.o -o accesstimer  

acctime.o: acctime.cpp bentimer.h 
    g++ -I /usr/local/boost/boost_1_39_0 -c acctime.cpp 

bentimer.o: bentimer.cpp bentimer.h 
    g++ -c bentimer.cpp 

हो रही है:

g++ -L/usr/local/boost/boost_1_39_0/stage/lib/ -llibboost_filesystem-gcc41-mt acctime.o bentimer.o -o accesstimer 
/usr/bin/ld: cannot find -llibboost_filesystem-gcc41-mt 
collect2: ld returned 1 exit status 
make: *** [accesstimer] Error 1 

यह इस के साथ काम:

accesstimer: acctime.o bentimer.o 
    g++ -L/usr/local/boost/boost_1_39_0/stage/lib -lboost_filesystem acctime.o bentimer.o -o accesstimer  

acctime.o: acctime.cpp bentimer.h 
    g++ -I /usr/local/boost/boost_1_39_0 -c acctime.cpp 

bentimer.o: bentimer.cpp bentimer.h 
    g++ -c bentimer.cpp 

अपने सभी मदद के लिए धन्यवाद

+0

आपको प्राप्त हो रहे त्रुटि संदेश पोस्ट कर सकते हैं? –

+0

जब आप -एल ध्वज के साथ पुस्तकालयों को लिंक करते हैं, तो आप हमेशा अग्रणी "lib" छोड़ देते हैं। तो libm.a को जोड़ना -lm है, libboost is -lboost, आदि है। –

उत्तर

9

संपादित
आप निष्पादन योग्य (आपकी पहली makefile नियम) आप -L झंडा साथ बढ़ावा पुस्तकालयों के स्थान से गुजरना होगा और -l झंडा साथ पुस्तकालयों के नाम बनाने के लिए वस्तु फ़ाइलों लिंक करते हैं ।

accesstimer: acctime.o bentimer.o 
    g++ -L/usr/local/boost/boost_1_39_0/stage/lib -lboost_filesystem acctime.o bentimer.o -o accesstimer 

जहां /usr/local/boost/boost_1_39_0/stage/lib शुरुआत lib (उन दो के रूप में उपयुक्त बदलाव करें) बिना पुस्तकालयों और boost_filesystem पुस्तकालय का फ़ाइल नाम युक्त निर्देशिका है।

किसी अन्य संस्करण .a फ़ाइल जिसे आप लिंक करने का प्रयास कर रहे हैं वह गलत है ... पुस्तकालय में कोई विस्तार नहीं होना चाहिए।

2

आपको लिंकिंग चरण (accesstimer लक्ष्य रेखा) में बढ़ावा पुस्तकालयों को जोड़ने की आवश्यकता है, न कि संकलन चरण (जहां केवल पथ शामिल है) के लिए।

0

हाय सेमेक/फ़ाइल बनाने में वृद्धि जोड़ने की पूरी प्रक्रिया है। यह उत्तर विशेष रूप से सीपीपी में नौसिखिया प्रोग्रामर के लिए विकसित किया गया है।

यदि आप मेकफ़ाइल की सहायता से बूस्ट लाइब्रेरी समर्थन जोड़ना चाहते हैं तो आपको लाइब्रेरी पथ (-एल विकल्प के साथ) और पुस्तकालयों (-l विकल्प के साथ) निर्दिष्ट करने की आवश्यकता है।

एल path/to// पुस्तकालयों -l llibrary

** अब कैसे पुस्तकालयों के लिए पथ **

के बाद लगता है चाल है:

  1. ओपन टर्मिनल और फायर कमांड

    $ बढ़ावा> libboost.txt

    $ एडिट libboost.txt

  2. यह आदेश है जो सभी को बढ़ावा देने पुस्तकालय पथ शामिल एक पाठ फ़ाइल को खोलता है का पता लगाने।

  3. अब लगता है ("सीटीआर + F") libboost, जो विस्तार .एक साथ और .so इस टेक्स्ट फ़ाइल में बढ़ावा के पुस्तकालय फ़ाइलों पर प्रकाश डाला गया।

  4. उस पथ की प्रतिलिपि बनाएँ जिसमें यह है। इसलिए फ़ाइलें मौजूद हैं।

    जैसे: एल/usr/lib/x86_64-Linux-: .so फ़ाइल /usr/lib/x86_64-linux-gnu/libboost_filesystem.so

    पर के रूप में उपस्थित तो के रूप में पथ निर्दिष्ट करते हैं जीएनयू/

अब कैसे संबंधित पुस्तकालय को खोजने के लिए?

  1. यह वही बढ़ावा कार्यक्षमताओं/मॉड्यूल आप

    उदाहरण के लिए उपयोग कर रहे हैं पर निर्भर करता है: आप को बढ़ावा देने सूत्रण का उपयोग कर रहे हैं, तो आप

    libboost_filesystem.so पुस्तकालयों

    निम्नलिखित की आवश्यकता होगी

    libboost_thread।इसलिए

  2. libboost_system.so पुस्तकालयों ऊपर जोड़े -l विकल्प के साथ इस प्रकार है:

    -l lboost_filesystem

    -l lboost_thread

    - एल lboost_system

आशा इस वसीयत आप में मदद करता है, आगे अगर कोई और अधिक आसान तरीका है, सुझाव है कि कृपया

संबंधित मुद्दे