को शिकायत करने में त्रुटि मैं अपने कंप्यूटर पर संकलित करने के लिए multiple_sources.cpp संकलित करने का प्रयास कर रहा हूं। मैं Xubuntu ल्यूसिड लिंक्स पूरी तरह से अद्यतन कर रहा हूँ।लिंक करते समय C++ लाइब्रेरी नहीं मिल पा रहा है, 'boost :: program_options` उदाहरण
यह g++ -c multiple_sources.cpp
के साथ इस मुद्दे के बिना संकलित कर देगा लेकिन जब मैं लिंक और मैं g++ multiple_sources.o
के साथ एक exectuable बनाने की कोशिश:
multiple_sources.cpp:(.text+0x3d): undefined reference to `boost::program_options::options_description::m_default_line_length'
multiple_sources.cpp:(.text+0x87): undefined reference to `boost::program_options::options_description::options_description(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)'
multiple_sources.cpp:(.text+0x15a): undefined reference to `boost::program_options::options_description::add_options()'
multiple_sources.cpp:(.text+0x17b): undefined reference to `boost::program_options::options_description_easy_init::operator()(char const*, char const*)'
multiple_sources.cpp:(.text+0x193): undefined reference to `boost::program_options::options_description_easy_init::operator()(char const*, char const*)'
multiple_sources.cpp:(.text+0x1af): undefined reference to `boost::program_options::options_description_easy_init::operator()(char const*, boost::program_options::value_semantic const*, char const*)'
multiple_sources.cpp:(.text+0x1eb): undefined reference to `boost::program_options::options_description::m_default_line_length'
multiple_sources.cpp:(.text+0x252): undefined reference to `boost::program_options::options_description::options_description(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)'
...
वगैरह विज्ञापन nauseum।
मैं पुस्तकालय स्थापित है:
>ls -l /usr/lib/libboost_program_options*
-rw-r--r-- 1 root root 640800 2010-03-31 21:19 /usr/lib/libboost_program_options.a
lrwxrwxrwx 1 root root 26 2010-04-09 00:57 /usr/lib/libboost_program_options-mt.a -> libboost_program_options.a
lrwxrwxrwx 1 root root 34 2010-04-09 00:57 /usr/lib/libboost_program_options-mt.so -> libboost_program_options.so.1.40.0
lrwxrwxrwx 1 root root 34 2010-04-09 00:57 /usr/lib/libboost_program_options.so -> libboost_program_options.so.1.40.0
-rw-r--r-- 1 root root 289336 2010-03-31 21:19 /usr/lib/libboost_program_options.so.1.40.0
जी ++ आदमी पेज पढ़ने के बाद, मैं भी कोशिश की है:
g++ -llibboost_program_options multiple_sources.cpp
g++ -llibboost_program_options.a multiple_sources.cpp
g++ -llibboost_program_options.so multiple_sources.cpp
- और सभी ऊपर के
-L/usr/lib
के साथ-l
वे सभी पर एक बदलाव के साथ असफल से पहले:
/usr/bin/ld: cannot find -llibboost_program_options.so
collect2: ld returned 1 exit status
क्या मैं गलत कर रहा हूँ?
यह सही है। उलझन में, लिंकर सभी पुस्तकालयों को 'lib' के साथ शुरू होने की उम्मीद करता है, और पुस्तकालय निर्दिष्ट करते समय इसे छोड़ने के लिए। –
@ माइक धन्यवाद! मैं बस पूछने वाला था कि वह क्यों था। अब यह आवश्यक है? क्या उस पर ओवरराइड करने का कोई तरीका है? मैं अब उत्सुकता से पूछता हूं। – ArtB
@ArtB: मुझे लगता है कि आप फ़ाइलों की सूची में पुस्तकालय के लिए पूर्ण पथ भी शामिल कर सकते हैं, बिना '-l' (उदा।' G ++ multiple_sources.cpp/usr/lib/libboost_program_options.so')। लेकिन सिस्टम पुस्तकालयों के लिए सम्मेलन का पालन करना बेहतर है; वे हमेशा '/ usr/lib' में स्थापित नहीं होते हैं। –