2011-11-09 13 views
6

मैं निम्नलिखित कोड है जो मैं संकलित करने के लिए कोशिश कर रहा हूँ है:बूस्ट जोड़ने असफल

#include <boost/filesystem/convenience.hpp> 
#include <boost/foreach.hpp> 
#include <boost/range.hpp> 
#include <iostream> 

int main(int, char**) 
{ 
    namespace bf = boost::filesystem; 
    BOOST_FOREACH(bf::path path, 
      boost::make_iterator_range(
       bf::recursive_directory_iterator(bf::path("/home")), 
       bf::recursive_directory_iterator())) { 
     std::cout << path.string() << std::endl; 
    } 
    return 0; 
} 

मेरे बढ़ावा पुस्तकालय में है/घर/foo/शामिल हैं। और इसमें शामिल फ़ाइलें वास्तव में हैं।

जब मैं निम्नलिखित चलाएँ:

g++ -I/home/foo/include/ test.cc 

मैं निम्नलिखित त्रुटि मिलती है। मैं इसे कैसे हल करूं। पर हमें का पालन करें?

/tmp/ccvDmFNL.o(.text+0x502): In function `__static_initialization_and_destruction_0(int, int)': 
: undefined reference to `boost::system::get_system_category()' 
/tmp/ccvDmFNL.o(.text+0x51b): In function `__static_initialization_and_destruction_0(int, int)': 
: undefined reference to `boost::system::get_generic_category()' 
/tmp/ccvDmFNL.o(.text+0x534): In function `__static_initialization_and_destruction_0(int, int)': 
: undefined reference to `boost::system::get_generic_category()' 
/tmp/ccvDmFNL.o(.text+0x54d): In function `__static_initialization_and_destruction_0(int, int)': 
: undefined reference to `boost::system::get_generic_category()' 
/tmp/ccvDmFNL.o(.text+0x566): In function `__static_initialization_and_destruction_0(int, int)': 
: undefined reference to `boost::system::get_system_category()' 
/tmp/ccvDmFNL.o(.gnu.linkonce.t._ZN5boost10filesystem24basic_directory_iteratorINS0_10basic_pathISsNS0_11path_traitsEEEE6m_initERKS4_+0x2e): In function `boost::filesystem::basic_directory_iterator<boost::filesystem::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> >::m_init(boost::filesystem::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> const&)': 
: undefined reference to `boost::filesystem::detail::not_found_error()' 
/tmp/ccvDmFNL.o(.gnu.linkonce.t._ZN5boost10filesystem24basic_directory_iteratorINS0_10basic_pathISsNS0_11path_traitsEEEE6m_initERKS4_+0xbe): In function `boost::filesystem::basic_directory_iterator<boost::filesystem::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> >::m_init(boost::filesystem::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> const&)': 
: undefined reference to `boost::filesystem::detail::dir_itr_first(void*&, void*&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, boost::filesystem::file_status&, boost::filesystem::file_status&)' 
/tmp/ccvDmFNL.o(.gnu.linkonce.t._ZN5boost6system10error_codeC1Ev+0x14): In function `boost::system::error_code::error_code()': 
: undefined reference to `boost::system::get_system_category()' 
/tmp/ccvDmFNL.o(.gnu.linkonce.t._ZN5boost10filesystem24basic_directory_iteratorINS0_10basic_pathISsNS0_11path_traitsEEEE9incrementEv+0xde): In function `boost::filesystem::basic_directory_iterator<boost::filesystem::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> >::increment()': 
: undefined reference to `boost::filesystem::detail::dir_itr_increment(void*&, void*&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, boost::filesystem::file_status&, boost::filesystem::file_status&)' 
/tmp/ccvDmFNL.o(.gnu.linkonce.t._ZN5boost10filesystem6statusINS0_10basic_pathISsNS0_11path_traitsEEEEENS_9enable_ifINS0_13is_basic_pathIT_EENS0_11file_statusEE4typeERKS7_+0x34): 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> >, boost::filesystem::file_status>::type boost::filesystem::status<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&)': 
: undefined reference to `boost::filesystem::detail::status_api(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::system::error_code&)' 
/tmp/ccvDmFNL.o(.gnu.linkonce.t._ZN5boost10filesystem6detail11dir_itr_impINS0_10basic_pathISsNS0_11path_traitsEEEED1Ev+0x1d): In function `boost::filesystem::detail::dir_itr_imp<boost::filesystem::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> >::~dir_itr_imp()': 
: undefined reference to `boost::filesystem::detail::dir_itr_close(void*&, void*&)' 
collect2: ld returned 1 exit status 

संपादित करें:

अब मैं करने की कोशिश की:

g++ -I/home/foo/include/ test.cc -lboost_system -lboost_filesystem 

और निम्न त्रुटि मिलती है:

/usr/bin/ld: cannot find -lboost_system 
collect2: ld returned 1 exit status 

मैं भीतर libboost_system-gcc34-1_38.so है

/home/foo/lib 

मैं इसे कैसे इंगित कर सकता हूं?

+0

मैं एक जवाब [यहां] जोड़ा (http://stackoverflow.com/a/35732953/984260)। नीचे दिए गए उत्तर मेरे लिए काम नहीं करते थे, हालांकि वे वही काम प्राप्त कर रहे थे जो मैंने किया था। – user984260

उत्तर

11
जीसीसी आदमी पृष्ठ से

:

-Ldir Add directory dir to the list of directories to be searched for -l.

इसलिए, यह है कि आप कमांड लाइन के लिए -L/home/foo/lib याद कर रहे हैं क्या है?

आपका कोड मेरी Linux मशीन पर सही तरीके से संकलित (उबंटू 10.04, को बढ़ावा देने-फाइल सिस्टम 1.40) निम्न आदेश के साथ:

g++ test.cpp -lboost_filesystem

या

g++ test.cpp -lboost_system -lboost_filesystem

यह मेरे त्रुटियों संकलन दिया g++ test.cpp -lboost_system

+0

'boost_filesystem.so' में 'boost_system.so' पर एक ऑटो-डिप्टी है? मुझे अधिक बार rtfm की जरूरत है। – moshbear

1

और -lboost_filesystem cmdline को (-lboost_filesystem-mt अगर आप सूत्रण करने जा रहे हैं), किसी भी इनपुट फ़ाइलों से पहले (यदि आप सूत्रण करने जा रहे हैं -lboost_system-mt) जोड़ें -lboost_system

+0

मुझे यह मिल रहा है:/usr/bin/ld: नहीं मिल सकता -lboost_system संग्रह 2: ld 1 निकास स्थिति लौटा दी। मेरे पास libboost_system-gcc34-1_38.so/home/foo/lib में है। क्या मैं इसका उपयोग कर सकता हूँ? मैं उससे कैसे जुड़ सकता हूं? – DarthVader

+1

'lboost _...' से पहले '-L/home/foo/lib' जोड़ें। – moshbear

1

आपकी बूस्ट लाइब्रेरी प्रत्यय gcc34-1_38 के साथ सजाए जाने लगते हैं। क्या आप जीसीसी 3.4 का उपयोग कर रहे हैं? लाइब्रेरी पथ पर आपकी बूस्ट लाइब्रेरी है? यदि नहीं, तो आपको -L ध्वज g ++ पर ध्वज का उपयोग करके अपने बूस्ट लाइब्रेरीज़ के पथ को जोड़ने की आवश्यकता हो सकती है या आप LD_LIBRARY_PATH पर्यावरण चर में पथ जोड़ सकते हैं। किसी भी मामले में, आप -lboost_system-gcc34-1_38 और -lboost_filesystem-gcc34-1_38 का उपयोग करके अपने बूस्ट लाइब्रेरी से लिंक कर सकते हैं।

2

आपको कंपाइलर/लिंकर को बताना होगा जहां आपका पुस्तकालय भी हैं, अगर वे डिफ़ॉल्ट स्थान पर नहीं हैं। इसके लिए आपको संकलक को -L ध्वज का उपयोग करना चाहिए:

g++ -I/home/y/include/ test.cc -L/home/foo/lib -lboost_system -lboost_filesystem 
संबंधित मुद्दे