2012-01-19 11 views
5

मैं कुछ कोड बनाने की कोशिश कर रहा हूं। यहां मुझे मिली त्रुटि है:जी ++ बूस्ट लाइब्रेरी नहीं ढूंढ सकता है। मैं कहता हूं कि वे सादे दृष्टि में हैं

main.o: In function `__static_initialization_and_destruction_0': 
/home/jmbeck/Downloads/boost_1_48_0/boost/system/error_code.hpp:214: undefined reference to `boost::system::generic_category()' 

और भी है, लेकिन मुझे नहीं लगता कि यह प्रासंगिक है।

libboost_system.a 
[email protected] 
libboost_system.so.1.48.0* 
libboost_thread.a 
[email protected] 
libboost_thread.so.1.48.0* 
libboost_regex.a 
[email protected] 
libboost_regex.so.1.48.0* 
... etc... 

मैं एक त्वरित निर्माण की कोशिश की है:

g++ -I/home/jmbeck/Downloads/boost_1_48_0 
    -L/home/jmbeck/Downloads/boost_1_48_0/stage/lib 
    -lm 
    -lboost_system 
    -lboost_thread 
    -lboost_regex 
    main.cpp 

/घर/jmbeck/डाउनलोड/boost_1_48_0/मंच/lib निर्देशिका उम्मीद फ़ाइलें हैं:

यहाँ निर्माण आदेश है कार्यक्रम जो पूर्व संकलित पुस्तकालयों का उपयोग नहीं करता था, और यह ठीक ठीक संकलित था। यह उचित शीर्षलेख पाता है, लेकिन पुस्तकालयों में नहीं।

मैं क्या गलत कर रहा हूं?

+0

आप 'g ++' के लिए '-Wall' विकल्प का उपयोग कर सकते हैं, और आप यह समझने के लिए' -v' का उपयोग कर सकते हैं कि यह क्या कर रहा है, और '-H' हेडर फ़ाइलों को पहले से ही समझने के लिए उपयोग कर सकता है। आपकी त्रुटि एक लिंकिंग त्रुटि है (गायब लाइब्रेरी, या गलत ऑर्डर)। –

+0

मेरा वास्तविक मेकफ़ाइल उपयोग करता है -Wall और -v (और -Wextra)। मैं मूल बातें नीचे उतरना चाहता था। लेकिन भविष्य के दर्शकों के लिए यह एक अच्छी युक्ति है; इससे पहले मुझे मदद मिली है। – jmbeck

उत्तर

6

main.cpp के बाद पुस्तकालयों को डालने का प्रयास करें।

मुझे अतीत में कुछ अजीबता का अनुभव हुआ है जब जीसीसी पुस्तकालयों को अनदेखा करता है क्योंकि ऐसा नहीं लगता कि उनका उपयोग मेरी स्रोत फ़ाइलों तक पहुंचने से पहले किया जाता है।

+0

धन्यवाद। उसने ऐसा किया मेरा मानना ​​है कि मैंने अतीत में किसी बिंदु पर जीसीसी अपडेट किया था। ये वही मेकफ़ाइल कुछ महीने पहले ठीक काम करते थे। वह निराशाजनक था। संकेत के लिए फ़िर से शुक्रिया! – jmbeck

+0

शायद यह एक बग के रूप में रिपोर्ट किया जाना चाहिए। – Crashworks

1

अक्सर लिंकर्स की आवश्यकता होती है कि लाइब्रेरी को कम से कम आश्रित के रूप में आदेश दिया जाए (मुझे विश्वास है कि एमएस नहीं करता है)। इस मामले में शायद थ्रेड या रेगेक्स सिस्टम पर निर्भर करता है, इसलिए आपको अन्य बूस्ट लाइब्रेरी के बाद -lsystem सूचीबद्ध करने की आवश्यकता होगी जो उस पर निर्भर करता है।

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