2011-04-06 17 views
7

न्यूबी प्रश्न ... मैं पहली बार बूस्ट का प्रयास कर रहा हूं क्योंकि मैं Boost Log लाइब्रेरी ड्राइव का परीक्षण करना चाहता हूं। मैं इस परीक्षण कार्यक्रम बनाया ...`boost :: log_mt_posix :: basic_attribute_set <char> :: ~ basic_attribute_set() '

#include <boost/log/trivial.hpp> 
#include <iostream> 

int fibonacci(int num) { 
    int i; 
    int a = 1; 
    int b = 1; 

    for (i = 2; i <= num; ++i) { 
     BOOST_LOG_TRIVIAL(info) << "Iteration " << i << " (a = " << a << ", b = " << b << ")..."; 
     b = a + b; 
     a = b - a; 
    } 

    return a; 
} 

int main() { 
    std::cout << "8th fibonacci number: " << fibonacci(8) << std::endl; 
    return 0; 
} 

संकलित डेटा:

**** Build of configuration Debug for project LoggingCpp **** 

make all 
Building file: ../main.cpp 
Invoking: GCC C++ Compiler 
g++ -O0 -g3 -Wall -c -fmessage-length=0 -lpthread -MMD -MP -MF"main.d" -MT"main.d" -o"main.o" "../main.cpp" 
Finished building: ../main.cpp 

Building target: LoggingCpp 
Invoking: GCC C++ Linker 
g++ -lpthread -o"LoggingCpp" ./main.o 
./main.o: In function `~basic_logger': 
/usr/include/boost/log/sources/basic_logger.hpp:90: undefined reference to `boost::log_mt_posix::basic_attribute_set<char>::~basic_attribute_set()' 
./main.o: In function `boost::log_mt_posix::trivial::logger::construct_logger()': 
/usr/include/boost/log/trivial.hpp:102: undefined reference to `boost::log_mt_posix::trivial::aux::init()' 
./main.o: In function `void boost::call_once<void (*)()>(boost::once_flag&, void (*)())': 
/usr/include/boost/thread/pthread/once.hpp:51: undefined reference to `boost::detail::get_once_per_thread_epoch()' 
/usr/include/boost/thread/pthread/once.hpp:55: undefined reference to `boost::detail::once_epoch_mutex' 
/usr/include/boost/thread/pthread/once.hpp:66: undefined reference to `boost::detail::once_epoch_mutex' 
/usr/include/boost/thread/pthread/once.hpp:77: undefined reference to `boost::detail::once_global_epoch' 
/usr/include/boost/thread/pthread/once.hpp:77: undefined reference to `boost::detail::once_global_epoch' 
/usr/include/boost/thread/pthread/once.hpp:77: undefined reference to `boost::detail::once_global_epoch' 
/usr/include/boost/thread/pthread/once.hpp:78: undefined reference to `boost::detail::once_epoch_cv' 
/usr/include/boost/thread/pthread/once.hpp:84: undefined reference to `boost::detail::once_epoch_mutex' 
/usr/include/boost/thread/pthread/once.hpp:84: undefined reference to `boost::detail::once_epoch_cv' 
/usr/include/boost/thread/pthread/once.hpp:88: undefined reference to `boost::detail::once_global_epoch' 
/usr/include/boost/thread/pthread/once.hpp:73: undefined reference to `boost::detail::once_epoch_cv' 
./main.o: In function `record_pump': 
/usr/include/boost/log/sources/record_ostream.hpp:293: undefined reference to `boost::log_mt_posix::aux::stream_provider<char>::allocate_compound(boost::log_mt_posix::basic_record<char> const&)' 
./main.o: In function `~auto_release': 
/usr/include/boost/log/sources/record_ostream.hpp:280: undefined reference to `boost::log_mt_posix::aux::stream_provider<char>::release_compound(boost::log_mt_posix::aux::stream_provider<char>::stream_compound*)' 
./main.o: In function `boost::log_mt_posix::sources::aux::logger_singleton<boost::log_mt_posix::trivial::logger>::init_instance()': 
/usr/include/boost/log/sources/global_logger_storage.hpp:126: undefined reference to `boost::log_mt_posix::sources::aux::global_storage<char>::get_or_init(std::type_info const&, boost::function0<boost::shared_ptr<boost::log_mt_posix::sources::aux::logger_holder_base> > const&)' 
/usr/include/boost/log/sources/global_logger_storage.hpp:147: undefined reference to `boost::log_mt_posix::odr_violation::throw_(char const*, unsigned long, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' 
./main.o: In function `boost::log_mt_posix::sources::aux::severity_level<boost::log_mt_posix::trivial::severity_level>::set_value(boost::log_mt_posix::trivial::severity_level)': 
/usr/include/boost/log/sources/severity_feature.hpp:95: undefined reference to `boost::log_mt_posix::sources::aux::set_severity_level(int)' 
./main.o: In function `boost::log_mt_posix::basic_record<char> boost::log_mt_posix::sources::basic_logger<char, boost::log_mt_posix::sources::severity_logger_mt<boost::log_mt_posix::trivial::severity_level>, boost::log_mt_posix::sources::multi_thread_model<boost::log_mt_posix::aux::light_rw_mutex> >::open_record_unlocked<boost::parameter::aux::tagged_argument<boost::log_mt_posix::keywords::tag::severity, boost::log_mt_posix::trivial::severity_level const> >(boost::parameter::aux::tagged_argument<boost::log_mt_posix::keywords::tag::severity, boost::log_mt_posix::trivial::severity_level const> const&)': 
/usr/include/boost/log/sources/basic_logger.hpp:269: undefined reference to `boost::log_mt_posix::basic_core<char>::open_record(boost::log_mt_posix::basic_attribute_set<char> const&)' 
./main.o: In function `boost::log_mt_posix::sources::basic_logger<char, boost::log_mt_posix::sources::severity_logger_mt<boost::log_mt_posix::trivial::severity_level>, boost::log_mt_posix::sources::multi_thread_model<boost::log_mt_posix::aux::light_rw_mutex> >::push_record_unlocked(boost::log_mt_posix::basic_record<char> const&)': 
/usr/include/boost/log/sources/basic_logger.hpp:280: undefined reference to `boost::log_mt_posix::basic_core<char>::push_record(boost::log_mt_posix::basic_record<char> const&)' 
./main.o: In function `basic_logger<boost::parameter::aux::tagged_argument<boost::log_mt_posix::keywords::tag::severity, const boost::log_mt_posix::trivial::severity_level> >': 
/usr/include/boost/log/sources/basic_logger.hpp:145: undefined reference to `boost::log_mt_posix::basic_core<char>::get()' 
/usr/include/boost/log/sources/basic_logger.hpp:145: undefined reference to `boost::log_mt_posix::basic_attribute_set<char>::basic_attribute_set()' 
./main.o: In function `~pair': 
/usr/include/c++/4.5/bits/stl_pair.h:72: undefined reference to `boost::log_mt_posix::basic_slim_string<char, std::char_traits<char> >::~basic_slim_string()' 
/usr/include/c++/4.5/bits/stl_pair.h:72: undefined reference to `boost::log_mt_posix::basic_slim_string<char, std::char_traits<char> >::~basic_slim_string()' 
./main.o: In function `basic_logger': 
/usr/include/boost/log/sources/basic_logger.hpp:135: undefined reference to `boost::log_mt_posix::basic_core<char>::get()' 
/usr/include/boost/log/sources/basic_logger.hpp:135: undefined reference to `boost::log_mt_posix::basic_attribute_set<char>::basic_attribute_set(boost::log_mt_posix::basic_attribute_set<char> const&)' 
./main.o: In function `boost::log_mt_posix::basic_attribute_set<char>::reference_proxy::operator=(boost::shared_ptr<boost::log_mt_posix::attribute> const&) const': 
/usr/include/boost/log/attributes/attribute_set.hpp:121: undefined reference to `boost::log_mt_posix::basic_slim_string<char, std::char_traits<char> >::basic_slim_string(char const*, unsigned long)' 
/usr/include/boost/log/attributes/attribute_set.hpp:121: undefined reference to `boost::log_mt_posix::basic_attribute_set<char>::insert(boost::log_mt_posix::basic_slim_string<char, std::char_traits<char> > const&, boost::shared_ptr<boost::log_mt_posix::attribute> const&)' 
/usr/include/boost/log/attributes/attribute_set.hpp:121: undefined reference to `boost::log_mt_posix::basic_slim_string<char, std::char_traits<char> >::~basic_slim_string()' 
/usr/include/boost/log/attributes/attribute_set.hpp:121: undefined reference to `boost::log_mt_posix::basic_slim_string<char, std::char_traits<char> >::~basic_slim_string()' 
./main.o: In function `pair<std::basic_string<char>, boost::shared_ptr<boost::log_mt_posix::attribute> >': 
/usr/include/c++/4.5/bits/stl_pair.h:116: undefined reference to `boost::log_mt_posix::basic_slim_string<char, std::char_traits<char> >::basic_slim_string(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' 
./main.o: In function `boost::log_mt_posix::basic_attribute_set<char>::insert(std::pair<boost::log_mt_posix::basic_slim_string<char, std::char_traits<char> > const, boost::shared_ptr<boost::log_mt_posix::attribute> > const&)': 
/usr/include/boost/log/attributes/attribute_set.hpp:507: undefined reference to `boost::log_mt_posix::basic_attribute_set<char>::insert(boost::log_mt_posix::basic_slim_string<char, std::char_traits<char> > const&, boost::shared_ptr<boost::log_mt_posix::attribute> const&)' 
./main.o: In function `boost::log_mt_posix::sources::aux::severity_level<boost::log_mt_posix::trivial::severity_level>::dispatch(boost::log_mt_posix::type_dispatcher&)': 
/usr/include/boost/log/sources/severity_feature.hpp:105: undefined reference to `boost::log_mt_posix::sources::aux::get_severity_level()' 
./main.o: In function `boost::log_mt_posix::sources::aux::severity_level<boost::log_mt_posix::trivial::severity_level>::detach_from_thread()': 
/usr/include/boost/log/sources/severity_feature.hpp:118: undefined reference to `boost::log_mt_posix::sources::aux::get_severity_level()' 
collect2: ld returned 1 exit status 
make: *** [LoggingCpp] Error 1 

About Boost Log syntax

मैं गलत तरीके से प्रवेश करें बूस्ट स्थापित किया था? क्या मैं महत्वपूर्ण पुस्तकालयों को याद कर रहा हूं? क्या मैंने आवश्यक लिंकर झंडे छोड़े?

उत्तर

0

ऐसा लगता है कि आपने लॉग बनाया नहीं है?

एक बार जब आप लॉग हेडर फाइलों आदि को अपने बूस्ट डिस्ट्रो में संबंधित फ़ोल्डरों में कॉपी कर लेते हैं (उसी संरचना को रखें यानी हेडर को हेडर में मर्ज करें, libs फ़ोल्डर को आपके बूस्ट डिस्ट्रो के libs फ़ोल्डर में) , आपको अभी भी बढ़ावा देने की आवश्यकता है और फिर जॉन ने उल्लेख किया है, इसके खिलाफ लिंक करें। यही कारण है कि ऊपर दिए गए लिंक को आप मानक बूस्ट बिल्ड निर्देशों के बारे में बताते हैं।

यह थोड़ी देर पहले है, लेकिन लिनक्स पर AFAIR आप बस अपने बूस्ट फ़ोल्डर की रूट में ./bjam चलाते हैं।

+0

रूट डीआईआर में बीजेएम विफल रहता है: 'बूस्ट लोड करने में असमर्थ। बिल्ड: "boost-build.jam" नहीं मिला। 'libs/log' में 'बिल्ड',' src' और 'doc' सहित कुछ उपनिर्देशिकाएं हैं, इसलिए मुझे नहीं लगता कि आप इसकी सामग्री को'/usr/lib64' पर कॉपी कर सकते हैं। – Pieter

+0

मेरा मतलब था कि आपने Sourceforge से एक बढ़ावा संस्करण डाउनलोड किया है और इसे कहीं भी अपने ड्राइव पर निकाला है उदा।/घर/उपयोगकर्ता/boost_1_46। बूस्ट में एक विशिष्ट फ़ोल्डर संरचना है। यदि आप लॉग डाउनलोड करते हैं और निकालें, तो इसकी एक समान संरचना है। तो लॉगडियर/बूस्ट डीआईआर/होम/उपयोगकर्ता/बूस्ट_1_46/बूस्ट से सभी फाइलों की प्रतिलिपि बनाएँ। लॉगडियर/libs में फ़ाइलों को/home/user/boost_1_46/libs में कॉपी करें, और बहुत आगे। एक बार जब आपने यह किया है कि बीजेएम का आह्वान किया गया है जैसा कि 5.1 http://www.boost.org/doc/libs/1_46_0/more/getting_started/unix-variants.html में कहा गया है। यदि आप आमंत्रित करते हैं ./bjam lib फ़ाइलों को इंस्टॉल किया जाएगा आपकी lib निर्देशिका – Ralf

+0

पर मैंने बूस्ट को अनइंस्टॉल किया, ताजा निकाला गया बूस्ट अपने '.tar.bz2' से बूस्ट और इसके '.zip' से लॉग को बढ़ावा दें। मैंने बूस्ट लॉग से बूस्ट रूट डीआईआर में डीआईआर की प्रतिलिपि बनाई, फिर '।/Bjam' और' ./jjam इंस्टॉल' किया। कंपाइलर अभी भी खुश नहीं है। http://pastebin.com/xTLQu9Cf – Pieter

1

आपको अपनी लिंक लाइन में -lboost-log-mt जैसे कुछ जोड़ने की आवश्यकता है।

+0

मुझे उन झंडे का नाम कैसे पता चलेगा जिन्हें मुझे जोड़ने की ज़रूरत है? ('-lboost-log-mt' लिंकर द्वारा पहचाना नहीं जाता है।) – Pieter

+0

इसे आज़माएं:' ls/usr/lib/libboost * log * 'और पोस्ट करें जो आपको मिलती है। हो सकता है कि आपके पास लाइब्रेरी का नाम आपके लिए गलत हो, लेकिन -l विकल्प जीसीसी के लिए मान्य है, जैसा कि आपके स्वयं के '-lpthread' के उपयोग से दिखाया गया है। –

+0

'एलएस: एक्सेस नहीं कर सकता/usr/lib/libboost * लॉग *: ऐसी कोई फ़ाइल या निर्देशिका नहीं ... मुझे पहले से ही डर था कि यह एक इंस्टॉलेशन समस्या थी। मैंने '/ usr/include/boost /' में '/ boost/log' की प्रतिलिपि बनाई लेकिन मुझे नहीं पता था कि अतिरिक्त फ़ाइलों की आवश्यकता थी। उनके इंस्टॉल निर्देश (http://boost-log.sourceforge.net/libs/log/doc/html/log/installation.html) थोड़ा अस्पष्ट हैं ... – Pieter

0

शायद boost_log के सही संस्करण को स्विच करें।

मैं करने के लिए अपरिभाषित संदर्भ के लिए एक ही मुद्दा है "को बढ़ावा देने :: लॉग इन करें :: v2_mt_posix :: कोर :: push_record_move (को बढ़ावा देने :: लॉग इन करें :: v2_mt_posix :: रिकॉर्ड &)"

मैं निर्माण मेरे द्वारा libboost_log। और मैं एनएम का उपयोग push_record_move पाया grep है कि, "को बढ़ावा देने :: लॉग इन करें :: v2s_mt_posix :: कोर :: push_record_move (को बढ़ावा देने :: लॉग इन करें :: v2s_mt_posix :: रिकॉर्ड &)"

के अनुभव से इससे पहले, मेकफ़ाइल में कुछ सीएफएलएजी जोड़ना चाहिए।

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