बूस्ट सीरियलाइजेशन लाइब्रेरी के साथ अपने प्रोग्राम को संकलित करते समय मैंने हाल ही में एक त्रुटि में भाग लिया है।

मैंने कई मंचों पर पढ़ा है कि मुझे बूस्ट सीरियलाइजेशन लाइब्रेरी (-lboost_serialization) को लिंक करने की आवश्यकता है। जो, मैंने किया।

हालांकि, एक त्रुटि है जो मुझे कोड पर मिल रही है:

/usr/local/boost_1_64_0/boost/serialization/throw_exception.hpp:36: undefined reference to `boost::archive::archive_exception::archive_exception(boost::archive::archive_exception const&)'

तो मैंने सोचा, अगर मुझे अपवाद पुस्तकालय भी शामिल करना पड़े तो क्या होगा? इसलिए मैंने इसे अपनी कंपाइलर सेटिंग्स के लिए पुस्तकालयों में जोड़ा:

-lboost_exception

हालांकि, अब यह कह रहा है कि यह boost_exception लाइब्रेरी नहीं ढूंढ पा रहा है। जो दिलचस्प है क्योंकि मैं इसे फाइल सिस्टम में देख पा रहा हूं!

मैं सोच रहा हूं कि क्या मैं सही काम कर रहा हूं या क्या मैं अपनी कंपाइलर सेटिंग्स में कुछ जोड़ना भूल रहा हूं? किसी भी प्रकार के मदद की बहुत सराहना की जाएगी!

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

यहाँ कोड है:

// MS compatible compilers support #pragma once

#if defined(_MSC_VER)
# pragma once
#endif

//  boost/throw_exception.hpp
//
//  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)

#include <boost/config.hpp>

#ifndef BOOST_NO_EXCEPTIONS
#include <exception>
#endif

namespace boost {
namespace serialization {

#ifdef BOOST_NO_EXCEPTIONS

inline void throw_exception(std::exception const & e) {
    ::boost::throw_exception(e);
}

#else

template<class E> inline void throw_exception(E const & e){
    throw e;// Error occurs here
}

#endif

} // namespace serialization
} // namespace boost

यहां एक कोड नमूना है जहां टूटना होता है

#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <vector>
#include "boost/serialization/vector.hpp"
#include <string>
#include <fstream>

int main()
{
    std::ofstream ofs("/home/phillip/test.txt");
    std::vector<std::string> tests;
    boost::archive::text_oarchive oa(ofs);
    oa << tests;
}
2
codingDude 2 अगस्त 2017, 01:59
क्या आप स्रोत कोड नमूना जोड़ सकते हैं जिसे आप संकलित कर रहे हैं? आपका कंपाइलर क्या है?
 – 
pe3k
2 अगस्त 2017, 13:26
मैं gcc . के साथ संकलन कर रहा हूँ
 – 
codingDude
2 अगस्त 2017, 19:42
आम तौर पर, आपको क्रमांकन पुस्तकालय को -lboost_serialization के माध्यम से लिंक करने की आवश्यकता होती है। वह सही है। अब आपको अपवाद पुस्तकालय को जोड़ने की आवश्यकता नहीं है। अब तक यह बूस्ट पथ समस्या के रूप में दिखता है। क्या आप "-v" gcc ध्वज के साथ अपने संकलन का पूरा आउटपुट पोस्ट कर सकते हैं? सभी त्रुटियों/चेतावनियों को देखना बेहतर है।
 – 
pe3k
2 अगस्त 2017, 22:08

1 उत्तर

सबसे बढ़िया उत्तर

मैंने ऐसा देखा है जब एक अलग कंपाइलर/संस्करण/झंडे के साथ संकलन करते समय बूस्ट लाइब्रेरी से लिंक होता है।

उदा. Coliru पर क्लैंग के साथ संकलन करते समय कई बूस्ट सीरियलाइज़ेशन उत्तर प्रोग्राम लिंक नहीं होंगे, जबकि वे ठीक चलेंगे जब जीसीसी . के साथ संकलन

1
sehe 3 अगस्त 2017, 00:32
मैंने जीसीसी . के साथ बूस्ट लाइब्रेरी संकलित की
 – 
codingDude
3 अगस्त 2017, 01:17
सुनिश्चित करें कि यह एक ही झंडे का उपयोग कर रहा है। अन्यथा, @ pe3k की तरह सबसे संभावित कारण यह है कि संकलक किसी अन्य पथ में लाइब्रेरी का एक अलग संस्करण ढूंढ रहा है (और वह लाइब्रेरी बूस्ट/जीसीसी/झंडे का एक अलग संस्करण था (संकलित का उपयोग करके)। ध्यान दें कि Boost.System भी एक निर्भरता है।
 – 
sehe
3 अगस्त 2017, 10:52
तो झंडे जो मैं अपने प्रोग्राम को संकलित करने के लिए उपयोग करता हूं, मुझे बूस्ट संकलित करने के लिए उपयोग करना चाहिए?
 – 
codingDude
3 अगस्त 2017, 20:14
1
ठीक है, मुझे बताने के लिए धन्यवाद, मौका मिलते ही मैं यह कोशिश करूंगा। शायद इस सप्ताहांत? अभी के लिए, मैंने sudo apt-get का उपयोग करके बूस्ट लाइब्रेरी का एक संस्करण डाउनलोड किया और सब कुछ काम करता है। यह 1.58 चल रहा है। मैं केवल इसका उपयोग कर रहा हूं ताकि विकास में बाधा न पड़े लेकिन नवीनतम संस्करण का उपयोग करना पसंद करें
 – 
codingDude
4 अगस्त 2017, 17:55