2009-06-30 15 views
26

मैं बस पहली बार बूस्ट के साथ शुरुआत कर रहा हूं, विवरण:बूस्टर लिंकर त्रुटि: अनसुलझा बाहरी प्रतीक "कक्षा बूस्ट :: सिस्टम :: error_category const & __cdecl boost :: system :: get_system_category (शून्य)"

  1. मैं दृश्य स्टूडियो का उपयोग कर रहा 2008 SP1
  2. मैं एक 64
  3. मैं बढ़ावा :: केवल asio (और किसी भी निर्भरता यह है)

मेरे कोड अब उपयोग कर रहा हूँ का निर्माण कर रहा हूँ संकलन, और मैंने बूस्ट लाइब्ररी में अपनी परियोजना की ओर इशारा किया es और अतीत सरल मुद्दों, अब मैं एक लिंकर त्रुटि का सामना करना पड़ रहा हो गया (64 libs बनाया करने के बाद):

2>BaseWebServer.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::get_system_category(void)" ([email protected]@[email protected]@[email protected]@XZ) 
2>BaseWebServer.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::get_generic_category(void)" ([email protected]@boos[email protected]@[email protected]@XZ) 

किसी भी विचार? BOOST_LIB_DIAGNOSTIC

#define और अब मेरी उत्पादन में मैं इस देखें::


मैं इस को परिभाषित जोड़ा

1>Linking to lib file: libboost_system-vc90-mt-1_38.lib 
1>Linking to lib file: libboost_date_time-vc90-mt-1_38.lib 
1>Linking to lib file: libboost_regex-vc90-mt-1_38.lib 

जो लगता है इंगित करने के लिए यह प्रणाली lib में वास्तव में जोड़ने है।

उत्तर

42

में लिंक करने की आवश्यकता है, मैंने समस्या हल की। जब मैंने 64-बिट पुस्तकालयों का निर्माण किया था तो मैंने 32-बिट पुस्तकालयों का निर्माण किया था। मैंने अपना निर्माण कथन तय किया, और 64-बिट पुस्तकालयों का निर्माण किया, और अब यह काम करता है।

C:\Program Files (x86)\boost\boost_1_38>bjam --build-dir=c:\boost --build-type=complete --toolset=msvc-9.0 address-model=64 architecture=x86 --with-system 
+0

आप अपने libs का परीक्षण कर सकते हैं इसके साथ सही मंच के लिए हैं: http://stackoverflow.com/questions/6014107/have-a-static-lib-is-there-a-simple-way-to-now-it- 32-बिट-या -64-बिट –

+1

पता-मॉडल से पहले मेरे पास '-' था जो वहां नहीं होना चाहिए। –

+0

यह मेरी बग को खोजने के लिए अच्छी प्रेरणा थी, मैं कुछ दर्पण की स्थिति में था जहां मैंने x64 के रूप में बढ़ावा libs बनाया था, लेकिन Win32 के रूप में एक नया अनुप्रयोग बना रहा था और x64 के रूप में बनाए गए पुस्तकालयों से लिंक करने का प्रयास कर रहा था। मैं भूल गया कि विजुअल स्टूडियो में टेम्पलेट प्रोजेक्ट्स डिफॉल्ट कॉन्फ़िगरेशन बनाते हैं जो कॉन्फ़िगरेशन मैनेजर में प्लग इन हो जाते हैं, यह मानने के बजाय कि वर्तमान समाधान कॉन्फ़िगरेशन क्या है। – jxramos

1

आपको boost_system लाइब्रेरी

+1

के लिए दो दिन बिताता हूं क्या इसमें ऑटो-लिंक नहीं मिलता है? अन्य पुस्तकालयों को लगता है। इसे जोड़ने का सही तरीका क्या है? (लाइब्रेरी आदि के सभी बदलावों को देखते हुए) –

+0

मजेदार बात यह है कि मुझे मिली पहली त्रुटि थी: घातक त्रुटि LNK1104: फ़ाइल 'libboost_system-vc90-mt-1_38.lib' नहीं खोल सकती है। मैंने तब सुनिश्चित किया कि पुस्तकालय lib पथ में था और यह चला गया। –

+1

अपनी प्रोजेक्ट सेटिंग्स पर आयात लाइब्रेरी (boost_system.??.lib) जोड़ें। –

5
#include <boost/system/config.hpp> 

मेरे मामले में, BOOST_LIB_DIAGNOSTIC नहीं दिखा था प्रणाली स्वतः ही में जोड़ा जा रहा है मैं बस को बढ़ावा देने/system/config.hpp शामिल करके इस समाधान किया गया:।

यहाँ मेरी bjam कमांड लाइन है।

0

मैं लिंकर त्रुटि और सीएमकेईई के माध्यम से प्रश्न के माध्यम से प्रश्न पर आया, इसलिए यदि मैं किसी और को यह प्रश्न उसी तरह से ढूंढता हूं तो मैं यह टिप्पणी यहां जोड़ रहा हूं। मेरे मामले में

add_definitions(-DBOOST_ALL_DYN_LINK) 
CMakeLists.txt, जो यूनिक्स के लिए ठीक है में

, लेकिन नहीं विंडोज:

ऐसा लगता है कि मेरे मामले में लिंकर त्रुटि एक गुमराह के कारण था। समाधान का उपयोग नहीं किया जाता है जो विंडोज़ पर परिभाषित करता है।

0

मैं दोनों संस्करणों और इस्तेमाल चरण लक्ष्य की जरूरत है, तो आप अपनी परियोजना में बढ़ावा :: प्रणाली का उपयोग करते हैं मैं x86 संस्करण और 64

1

के लिए डिफ़ॉल्ट ./stage के लिए --stagedir =।/StageX86 इस्तेमाल किया , आपको बूस्ट :: सिस्टम lib के x86 या x64 संस्करण का उपयोग और नियुक्त करना चाहिए।

आप निम्न बैच फ़ाइल के साथ बूस्ट लाइब्रेरी को पुन: संकलित कर सकते हैं। इन्हें बूस्ट रूट फ़ोल्डर में सहेजें और इसे सीएमडी विंडोज में चलाएं (डबल क्लिक न करें!):

call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" x86 


cd boost_1_60_0 
call bootstrap.bat 

rem Most libraries can be static libraries 
b2 -j8 toolset=msvc-14.0 address-model=64 architecture=x86 link=static threading=multi runtime-link=shared --build-type=minimal stage --stagedir=stage/x64 
b2 -j8 toolset=msvc-14.0 address-model=32 architecture=x86 link=static threading=multi runtime-link=shared --build-type=minimal stage --stagedir=stage/win32 

pause 

अधिक जानकारी के लिए आप इस लेख देख सकते हैं: https://studiofreya.com/2015/12/19/how-to-build-boost-1-60-with-visual-studio-2015/

0

मैं भी CMake प्लस इस लिंकर त्रुटि के लिए से यहाँ आया है, लेकिन मेरे मामले में यह तथ्य यह है कि CMake डिफ़ॉल्ट रूप से कोशिश करेंगे था डिफ़ॉल्ट रूप से 32 बिट के साथ निर्माण करने के लिए। यह -Ax64

cmake -Ax64 {path to CMakeLists.txt} 
1

निर्दिष्ट करके मुझे ठीक किया गया था। मैंने ऊपर वर्णित सभी की कोशिश की, लेकिन कुछ भी मदद नहीं करता है। समाधान सरल था: सबसे पहले मैंने एक खाली परियोजना के साथ काम किया और वहां मेरे पास लिंकर त्रुटि LNK2019 थी। लेकिन जब मैंने stdafx.h के साथ नया डिफ़ॉल्ट Win32 कंसोल अनुप्रयोग बनाया, targetver.h और stdafx.cpp फ़ाइलें सब कुछ काम किया। हो सकता है कि यह किसी के लिए उपयोगी होगा, मैं इस

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