2013-08-13 6 views
6

ऐसा लगता है कि मैं स्पष्ट देखने में असमर्थ हूं। http://pastie.org/8231509
आप कर सकते हैं के रूप में: मैं अपने प्रोजेक्ट के लिए कुछ बूस्ट पुस्तकालय सुविधाओं का उपयोग करना चाहता था और पता है मैं इन अच्छा अचानक त्रुटियों हो रही है: मुख्य'boost :: system :: generic_category()' के लिए अनिर्धारित संदर्भ?

Linking CXX executable ATFOR CMakeFiles/ATFOR.dir/stdafx.cc.o: In function __static_initialization_and_destruction_0(int, int)': stdafx.cc:(.text+0x3c): undefined reference to boost::system::generic_category()' stdafx.cc:(.text+0x48): undefined reference to boost::system::generic_category()' stdafx.cc:(.text+0x54): undefined reference to boost::system::system_category()' CMakeFiles/ATFOR.dir/Main.cc.o: In function __static_initialization_and_destruction_0(int, int)': Main.cc:(.text+0x29d): undefined reference to boost::system::generic_category()' Main.cc:(.text+0x2a9): undefined reference to boost::system::generic_category()' Main.cc:(.text+0x2b5): undefined reference to boost::system::system_category()' collect2: error: ld returned 1 exit status

यहाँ आप मेरी CMakeLists.txt, हेडर मिल जाए, और देखें, मैंने सीएमकेलिस्ट के साथ बहुत कुछ खेलने की कोशिश की और मुझे पूरा यकीन है कि मेरे पास मेरे प्रोजेक्ट की सभी शीर्षकों की आवश्यकता है। वैसे भी, मैंने पहले कभी ऐसी त्रुटियां नहीं की हैं और मैं वास्तव में यहां क्या गलत है, इसके बारे में किसी भी सुझाव/समाधान की सराहना करता हूं क्योंकि मेरे पास अभी तक कोई विचार नहीं है। अग्रिम में Thx।

उत्तर

13

आप स्पष्ट रूप से प्रणाली पुस्तकालय के लिए यह अपने कार्यक्रम में जुड़े होने की जोड़ना होगा

find_package(Boost REQUIRED COMPONENTS system) 
#          ^^^^^^ this :) 

यह भी (आदि regex, धागा,) है कि अलग से निर्माण कर रहे हैं अन्य बूस्ट पुस्तकालयों के लिए किया जाना चाहिए (see here) ।

+0

इससे त्रुटि ठीक नहीं हुई:/ – Auberotte

+2

सीएमके का कहना है कि इसे फाइल सिस्टम, सिस्टम, के लिए libs मिली है ... लेकिन जब मैं 'बना' करता हूं तो एक लिंकिंग त्रुटि होती है, मैंने libboost-1.53.0- सब-देव, तो मुझे बस इतना चाहिए कि मुझे चाहिए। क्या बूस्ट :: सिस्टम के लिए कोई हेडर है जिसमें मुझे शामिल करने की आवश्यकता है? एक – Auberotte

7

ठीक है, उन दिलचस्पी के लिए, मार्क गार्सिया के जवाब एक अच्छा फोन था लेकिन यहाँ क्या अधिक महत्वपूर्ण है कि आप स्पष्ट रूप

TARGET_LINK_LIBRARIES(ATFOR ${OpenCV_LIBS} curl ${Boost_SYSTEM_LIBRARY} ${Boost_FILESYSTEM_LIBRARY})

अन्य सभी विकल्प मैं करने की कोशिश की तरह libs आप को बढ़ावा देने से चाहते हैं लिंक करने की आवश्यकता है कि है और पढ़ने के बारे में मुझे काम नहीं किया, पता नहीं क्यों, लेकिन मुझे उम्मीद है कि यह किसी की मदद करता है।

11

लिंकिंग चरण में "सिस्टम" lib गायब है। मेरे config इस प्रकार है और यह त्रुटि को ठीक:

find_package(Boost 1.55.0 REQUIRED COMPONENTS system filesystem) 

include_directories(... ${Boost_INCLUDE_DIRS}) 

link_directories(... ${Boost_LIBRARY_DIRS}) 

target_link_libraries(... ${Boost_LIBRARIES}) 

ध्यान दें कि का उपयोग करते हुए केवल

find_package(Boost 1.55.0 REQUIRED) 

${Boost_LIBRARIES} के रूप में काम नहीं करता है तो उपलब्ध नहीं होगा।

+1

सुपर सहायक नहीं मिला। धन्यवाद। +1। मेरे मामले में, मुझे बस लिखना था 'find_package (आवश्यक प्रणाली को बढ़ावा दें) '। मुझे फाइल सिस्टम की आवश्यकता नहीं है (अभी तक)। –

+1

हालांकि यह प्रश्न मेरी समस्या से असंबंधित था, लेकिन मैंने यहां जवाबों को समझने का फैसला किया और आपके जवाब ने मुझे एहसास दिलाया कि मुझे 'फाइल सिस्टम' की आवश्यकता है जिसने अंततः मेरी समस्या का समाधान किया। धन्यवाद। +1। – rayryeng

2

जांचें कि क्या आपके पास आपके बूस्ट लाइब्रेरीज़ के सही निर्माण (gcc, msvc ...) हैं। मुझे यह त्रुटि मिली जब मैंने msvc के लिए बनाए गए पुस्तकालयों के साथ mingw का उपयोग करके किसी प्रोजेक्ट को जोड़ने का प्रयास किया। यदि यह अलग है, तो अपने प्रोजेक्ट में उपयोग किए जा रहे प्लेटफॉर्म के लिए इसे बनाने का प्रयास करें।

पहली बार मैंने बूस्ट का उपयोग किया था, मैंने इसे डिफ़ॉल्ट पैरामीटर के साथ बनाया था जिसके परिणामस्वरूप msvc के लिए बनाई गई लाइब्रेरीज़ थी, भले ही मैं अपने प्रोजेक्ट के लिए mingw का उपयोग कर रहा था। हालांकि सीएमके को हेडर और पुस्तकालय मिलते थे और जब तक मैंने लाइब्रेरी सुविधाओं और संकलन का उपयोग करना शुरू नहीं किया, तब तक सबकुछ ठीक लग रहा था, जिसके परिणामस्वरूप ओपी द्वारा उल्लिखित त्रुटि हुई।

toolset=gcc को पुनर्निर्माण बढ़ाने के लिए इसे हल किया गया (मैं विंडोज, सीएमके + मिनजीडब्लू का उपयोग कर रहा था)।

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