के तहत डब्ल्यू/बूस्ट सीरियलाइजेशन को जोड़ने वाले अनसुलझे प्रतीक मैं बताता हूं कि मैं आज रात एक मूर्खता की तरह महसूस कर रहा हूं। मैं बूस्ट सीरियलाइजेशन के साथ आरएचईएल 5.6, जीसीसी 4.1.2, बूस्ट 1.44.0 के तहत एक कार्य समस्या को कम से कम पुन: पेश करने की कोशिश कर रहा हूं।उबंटू 12.10
पर्यावरण मैं के साथ इस समस्या आ रही है उबंटू सर्वर, जीसीसी 4.7.2, और बढ़ावा 1.44.0 के निर्माण (सिस्टम संकलक के खिलाफ, संकुल, आदि) (देव संकुल स्थापित के साथ) है।
मेरा कोड साफ़ रूप से संकलित करता है, लेकिन मुझे विभिन्न boost::archive
प्रकारों से संबंधित अपरिभाषित प्रतीकों का असंख्य मिल रहा है।
668 43569 stat("/usr/local/boost/1.44.0/lib/libboost_serialization.so", {st_mode=S_IFREG|0755, st_size=700481, ...}) = 0
669 43569 open("/usr/local/boost/1.44.0/lib/libboost_serialization.so", O_RDONLY) = 8
मेरे makefile है:
default: test-app
all: test-app
BOOST := /usr/local/boost/1.44.0
CPPFLAGS := -fPIC -Wall -Wextra -Werror
INCDIRS := -isystem$(BOOST)/include
.LIBDIRS. := $(BOOST)/lib
.LIBS. :=boost_serialization
LIBS := $(foreach lib,$(.LIBS.),-l$(lib))
LIBDIRS := $(foreach dir,$(.LIBDIRS.),-L$(dir))
CPPFLAGS += $(INCDIRS)
base.o : base.cpp base.hpp
g++ $(CPPFLAGS) --compile $< -o [email protected] -g
derived.o : derived.cpp base.hpp derived.hpp
g++ $(CPPFLAGS) --compile $< -o [email protected] -g
main.o: main.cpp derived.hpp
g++ $(CPPFLAGS) --compile $< -o [email protected] -g
test-app: main.o derived.o base.o
g++ -o [email protected] $(LIBDIRS) $(LIBS) $^
clean:
rm -f *.o test
एक (बहुत) छोटे लिंकर त्रुटियों मैं हो रही है के नमूने की तरह हैं मेरे मेकअप पर strace चल रहा है, मैं यह उम्मीद boost_serialization पुस्तकालय उठा देखना :
base.o: समारोह में
void boost::archive::basic_text_oprimitive<std::ostream>::save<boost::archive::class_id_reference_type>(boost::archive::class_id_reference_type const&)': /usr/local/boost/1.44.0/include/boost/archive/basic_text_oprimitive.hpp:91: undefined reference to
बढ़ावा :: संग्रह :: archive_exception :: archive_exception (को बढ़ावा देने :: संग्रह :: archive_exception :: exception_code, चार स्थिरांक *, चार स्थिरांक *) '012,351,/usr/local/boost/1.44.0/include/boost/archive/basic_text_oprimitive.hpp:91: अपरिभाषित संदर्भ के लिएboost::archive::archive_exception::~archive_exception()' /usr/local/boost/1.44.0/include/boost/archive/basic_text_oprimitive.hpp:91: undefined reference to
बढ़ावा :: संग्रह :: archive_exception :: ~ archive_exception() 'base.o: में फ़ंक्शनvoid boost::archive::basic_text_oprimitive<std::ostream>::save<boost::archive::tracking_type>(boost::archive::tracking_type const&)': /usr/local/boost/1.44.0/include/boost/archive/basic_text_oprimitive.hpp:91: undefined reference to
बूस्ट :: संग्रह :: archive_exception :: archive_exception (boost :: archive :: archive_exception :: upgrade_code, char const *, char const *) ' /usr/local/boost/1.44.0/include/boost/ संग्रह/basic_text_oprimitive.hpp: 91: अपरिभाषित संदर्भ के लिएboost::archive::archive_exception::~archive_exception()' /usr/local/boost/1.44.0/include/boost/archive/basic_text_oprimitive.hpp:91: undefined reference to
बढ़ावा :: संग्रह :: archive_exception :: ~ archive_exception() 'base.o: समारोह मेंvoid boost::archive::basic_text_oprimitive<std::ostream>::save<unsigned int>(unsigned int const&)': /usr/local/boost/1.44.0/include/boost/archive/basic_text_oprimitive.hpp:91: undefined reference to
बढ़ावा :: संग्रह :: archive_exception :: archive_exception (बढ़ावा :: संग्रह :: archive_exception :: upgrade_code, चार कॉन्स *, चार कॉन्स *) ' /usr/local/boost/1.44.0/include/boost/archive/basic_text_oprimitive.hpp:91:boost::archive::archive_exception::~archive_exception()' /usr/local/boost/1.44.0/include/boost/archive/basic_text_oprimitive.hpp:91: undefined reference to
बढ़ावा देने के लिए अनिर्धारित संदर्भ :: संग्रह :: archive_exception :: ~objdump आयकर /usr/local/boost/1.44.0/: archive_exception() '
इसी तरह, अगर मैं संदर्भित .so के पर एक प्रतीक डंप करते हैं, मैं आवश्यक प्रतीकों को देखने के lib/libboost_serialization.so | सी ++ फिल्ट | ग्रेप "को बढ़ावा देने :: संग्रह :: archive_exception :: ~ archive_exception()" 000000000004e670 जी एफ .text 0000000000000065
बढ़ावा :: संग्रह :: archive_exception :: ~ archive_exception() 000000000004e6e0 जी एफ .text 0000000000000009 आभासी को thunk को बढ़ावा देने :: संग्रह :: archive_exception :: ~ archive_exception() 000000000004e6f0 जी एफ .text 0000000000000012
बढ़ावा :: संग्रह :: archive_exception :: ~ archive_exception() 000000000004ed60 जी एफ .text 000000000000005c
बढ़ावा :: संग्रह :: archive_exception :: ~ archive_exception() 000000000004e710 जी एफ।पाठ 0000000000000009 आभासी thunk बढ़ावा देने के लिए :: संग्रह :: archive_exception :: ~ archive_exception()
मैं अब थोड़ी देर के लिए टेबल के खिलाफ मेरे सिर पीटने किया गया है ... उम्मीद कर किसी की मदद कर सकते हैं। मुझे नहीं लगता कि विशिष्ट स्रोत मायने रखता है, लेकिन अगर अनुरोध किया जाता है, तो मैं इसे पोस्ट कर सकता हूं।
अतिरिक्त पर्यावरण विवरण:
जी ++ --version जी ++ मुफ्त सॉफ्टवेयर (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2 कॉपीराइट (सी) 2012 फ्री सॉफ्टवेयर फाउंडेशन, Inc यह वह जगह है ; शर्तों की प्रतिलिपि बनाने के लिए स्रोत देखें। कोई वारंटी नहीं है; व्यापारिकता या किसी विशेष उद्देश्य के लिए फिटनेस के लिए भी नहीं।
ld --version GNU ld (GNU Binutils for Ubuntu) 2.22.90.20120924 Copyright 2012 Free Software Foundation, Inc. This program is free software; you may redistribute it under the terms of the GNU General Public License version 3 or (at your option) a later version. This program has absolutely no warranty.
साथ ही, इस एक वीएम Windows 8 पर हाइपर-वी के तहत चल रही है, हालांकि, मुझे लगता है कि यहाँ मायने रखती है नहीं लगता।
पूरा लिंक लाइन: जी ++ एल/usr/स्थानीय/बढ़ावा/1.44.0/lib -lboost_serialization -ओ परीक्षण एप्लिकेशन main.o derived.o base.o
बस किसी भी मुद्दे/usr/स्थानीय से बढ़ावा पुस्तकालयों के सेट से हो सकता है अलग करने के लिए हल करना चाहिए, आप अपने Makefile बात करने के लिए खींचने की कोशिश कर सकता है पुस्तकालयों और शीर्षकों में से/usr/lib और/usr/इसके बजाय शामिल हैं और देखें कि यह क्या है वहाँ सफलतापूर्वक संकलित? – Tuxdude
वास्तविक लिंक कमांड 'मेक' चलाना चल रहा है। –
@ एन.एम. ऊपर किया यह है: g ++ -L/usr/local/boost/1.44.0/lib -lboost_serialization -o test-app main.o derived.o base.o –