घातक त्रुटि LNK1104: 'libboost_system-vc110-mt-gd-1_51.lib' फ़ाइल नहीं खोल सकता


88

ऐसा लगता है कि मुझे यह काम नहीं मिल रहा है। मैंने एक साधारण कंसोल एप्लिकेशन (जो websocket++लाइब्रेरी पर निर्भर है ) को पुस्तकालयों की आवश्यकता Boostहै .. लेकिन जब मैं संकलन करने की कोशिश करता हूं तो मुझे मिलता है:

घातक त्रुटि LNK1104: 'libboost_system-vc110-mt-gd-1_51.lib' फ़ाइल नहीं खोल सकता

हालाँकि, मैंने bjam किया, जिसने लिब को बनाया (boost_root)/stage/libsऔर मैंने लिबास के संकलनकर्ता के लिए पथ को जोड़ा C++/Additionnals includes

अगर मैं देखूं (boost_root)/stage/libsतो फाइल libboost_system-vc110-mt-gd-1_51.libनहीं है। इसके libboost_system-vc110-mt-sgd-1_51.libबदले कहा जाता है।

कोई उपाय?


1
Ive libboost_system-vc110-mt-gd-1_51.lib फ़ाइल को bjam के साथ पूर्ण निर्माण करने में सक्षम है, लेकिन फिर भी मुझे त्रुटि मिलती है।
रशिनो

22
ओपन करें VS2012 developer command prompt, अपने बूस्ट रूट डायरेक्टरी पर जाएं और टाइप करें bootstrap, और फिर टाइप करें b2और आपको लाइब्रेरी फ़ाइलों का पूरा सेट मिलना चाहिए।
जेसी गुड

क्या आपने अपनी परियोजना में पथ और लिंकर पथ शामिल किए?
जेसी गुड

1
क्या आप अपना एप्लिकेशन बना रहे हैं /MD?
महेश

यदि संकलन के बजाय डाउनलोड करना ठीक है, तो यहां से लाइब
gorogm

जवाबों:


93

सी ++ → जनरल → अतिरिक्त निर्देशिकाएँ शामिल पैरामीटर निर्देशिका जहां संकलक हेडर फाइल के लिए खोज करेंगे लिस्टिंग के लिए है।

आपको लिंक करने वाले को यह बताने की आवश्यकता है कि लिंक करने के लिए पुस्तकालयों को कहां देखना है। इस सेटिंग तक पहुंचने के लिए, समाधान एक्सप्लोरर विंडो में प्रोजेक्ट नाम पर राइट-क्लिक करें , फिर गुण → लिंकर → सामान्य → अतिरिक्त लाइब्रेरी निर्देशिकाएँ<boost_path>\stage\libयहां दर्ज करें (यह वह मार्ग है जहां लाइब्रेरी स्थित हैं यदि आप डिफ़ॉल्ट विकल्पों का उपयोग करके बूस्ट का निर्माण करते हैं)।


क्या आप मुझे समझा सकते हैं कि बूस्ट_पैथ क्या है
ggsmartboy

1
@ggsmartboy यह वह रास्ता है जहां बूस्ट सोर्स फाइल्स होती हैं (कंपाइलर में आप जिस लिस्ट को लिस्ट करते हैं, उसमें पाथ भी शामिल होते हैं ताकि वह बूस्टर हेडर पा सकें)। उत्तर मानता है कि आपने खुद को बनाया (वितरण का उपयोग नहीं कर रहा है) डिफ़ॉल्ट बिल्ड विकल्पों का उपयोग करके।
प्रेटोरियन

बहुत बढ़िया। मुझे एक वास्तविक सिरदर्द भी बचाया। मैं इसे बूस्ट डॉक्यूमेंटेशन में स्थान नहीं दे पाया था (यदि यह वहां भी है), तो मुझे नहीं पता! :)
अनुपस्थितमन्दुक

2
इस उत्तर में उल्लिखित सेटिंग्स पाई जाती हैं यदि आप प्रोजेक्ट पर राइट क्लिक करते हैं और गुण चुनते हैं (मेरे जैसे नॉब्स के लिए, राइट क्लिक सॉल्यूशन, टूल्स> ऑप्शन पर जा रहे हैं। वे ऑप्शन मेरे सभी प्रोजेक्ट्स पर मौजूद नहीं थे)। VS2013
Mr_and_Mrs_D

1
@Mr_and_Mrs_D आप सही हैं, मुझे लगा कि पाठक उस हिस्से को जानता है। अपडेट किया गया।
प्रेटोरियन

97

यह मेरे जैसे शौकिया के लिए सबसे सरल तरीका है जो अपने दम पर C ++ का अध्ययन कर रहा है:

पहले अपनी पसंद के किसी भी निर्देशिका के लिए बढ़ावा पुस्तकालय को खोलना। मैं सलाह देता हूं c:\directory

  1. अपना दृश्य C ++ खोलें।
  2. एक नया प्रोजेक्ट बनाएं।
  3. प्रोजेक्ट पर राइट क्लिक करें।
  4. प्रॉपर्टी पर क्लिक करें।
  5. C / C ++ पर क्लिक करें।
  6. सामान्य पर क्लिक करें।
  7. अतिरिक्त शामिल लाइब्रेरी का चयन करें।
  8. लाइब्रेरी डेस्टिनेशन को शामिल करें। उदा c:\boost_1_57_0
  9. प्री-कंपाइलर हेडर पर क्लिक करें।
  10. पूर्व-संकलित हेडर बनाने / उपयोग करने पर क्लिक करें।
  11. पूर्व-संकलित हेडर का उपयोग न करें का चयन करें।

फिर लिंक लाइब्रेरी पर जाएं क्या आप अपनी समस्याओं का अनुभव कर रहे थे।

  1. जाने के लिए निकाली गई फ़ाइल थी c:\boost_1_57_0
  2. क्लिक करें booststrap.bat(कमांड विंडो पर टाइप करने की जहमत न उठाएं और प्रतीक्षा करें और उस विंडो को बंद न करें, जिस स्थान पर मुझे अपनी समस्या थी जिसे हल करने में मुझे दो सप्ताह का समय लगा। कुछ समय बाद booststrapवही फाइल चलेगी और उत्पादन करेगी। लेकिन अब दो अलग-अलग नामों के साथ: b2और bjam
  3. पर क्लिक करें b2और इसे चलाने के लिए प्रतीक्षा करें।
  4. पर क्लिक करें bjamऔर इसे चलाने के लिए प्रतीक्षा करें। फिर एक फोल्डर का उत्पादन किया जाएगा stage
  5. प्रोजेक्ट पर राइट क्लिक करें।
  6. प्रॉपर्टी पर क्लिक करें।
  7. लिंकर पर क्लिक करें।
  8. सामान्य पर क्लिक करें।
  9. अतिरिक्त लाइब्रेरी डायरेक्टरी शामिल करें पर क्लिक करें।
  10. लाइब्रेरी के भाग का चयन करें जैसे c:\boost_1_57_0\stage\lib

और आप जाने के लिए अच्छे हैं!


3
बहुत बहुत धन्यवाद वू जी - मैंने पहले कभी ऐसा कुछ नहीं किया था और ये कदम वास्तव में मुझे बूस्ट के निर्माण और लापता 'लिबेरोस्ट_सेरिएलाइज़ेशन-vc140-mt-gd-1_57.lib' की लाइब्रेरी फाइल बनाने की आवश्यकता थी - मुझे लिंक करने में समस्या हो रही थी: )
विक्सएक्सड

5
धन्यवाद, मुझे अच्छे विस्तृत निर्देश पसंद हैं। बूस्ट सेट करने के चरण 2/3/4 के लिए, मैंने इसके बजाय क्या किया: क) रूट के रूप में कमांडलाइन प्रॉम्प्ट खोलें ; b) बूस्ट_1_57_0 निर्देशिका में परिवर्तन; ग) प्रकार bootstrap.bat(इसमें 10-20 सेकंड लगते हैं); डी) ./b2निर्देश के अनुसार टाइप करें (इसे पूरा होने में 30-40 मिनट लगते हैं)।
डैरेन कुक

1
मुझे विजुअल स्टूडियो कमांड प्रॉम्प्ट का उपयोग करके बूटस्ट्रैप खोलना था , क्योंकि नियमित कमांड प्रॉम्प्ट को नहीं पता था कि 'cl' कमांड को कैसे प्रोसेस करना है।
jlaverde

2/20/2018, आपका समाधान मेरे लिए काम करता है (VS2017 + बूस्ट 1.66)। बहुत बहुत धन्यवाद।
22

शुरुआती के लिए कदम के लिए धन्यवाद। काश, हर कोई हमेशा ऐसे जवाब देता जैसा आपने दिया है।
मुदित जैन

6

मुझे भी यही समस्या थी। इसका कारण यह था कि मैंने बूस्ट को विजुअल C ++ 2010 (v100) के साथ संकलित किया और मैंने लाइब्रेरी को विज़ुअल स्टूडियो 2012 (v110) के साथ गलती से उपयोग करने की कोशिश की।

इसलिए, मैंने प्रोजेक्ट गुणों में जा रहे कॉन्फ़िगरेशन (दृश्य स्टूडियो 2012 में) -> जनरल -> प्लेटफॉर्मफॉर्म टूलसेट को बदल दिया और विजुअल स्टूडियो 2012 (v110) से विजुअल स्टूडियो 2010 (v100) के मूल्य को बदल दिया ।


7
मुझे उम्मीद है कि जब आप v100 का उपयोग करने के लिए प्लेटफ़ॉर्म टूलसेट को बदलते हैं, तो आपको एहसास होता है कि आप VS2012 IDE को कंपाइलर का उपयोग करने के लिए कह रहे हैं जो VS2010 के साथ भेज दिया गया है। कोई भी C ++ 11 सुविधाएँ जो VS2012 संकलक में जोड़ी गई थीं, उपलब्ध नहीं होंगी। एक बेहतर समाधान VS2012 संकलक का उपयोग करके बूस्ट को संकलित करना है; आपके पास 2010 और 2012 दोनों से उत्पन्न लाइब्रेरी हो सकती है क्योंकि बूस्ट आउटपुट फाइलरों में संकलक संस्करण संख्या डालता है।
प्रेटोरियन

आप सही हैं और मैं जागरूक हूं। मुझे डर है कि अगर मैं पुस्तकालयों और संकलक को अपग्रेड करता हूं तो क्या हो सकता है। इसलिए, जब परियोजना समाप्त हो जाएगी तो मैं यह सब सामान ठीक कर दूंगा। धन्यवाद!
कोटा संतोस

6

अभी तक एक और समाधान:

मुझे स्टम्प्ड किया गया था क्योंकि मैं अपने लिंक-> अतिरिक्त डिपेंडेंसी संपत्ति में boost_regex-vc120-mt-gd-1_58.lib को शामिल कर रहा था, लेकिन लिंक मुझे बताती रही कि वह libboost_regex-vc120-mt-gd-1_58.lib (I) नहीं खोल सकती ध्यान दें उपसर्ग)। मैंने libboost_regex-vc120-mt-gd-1_58.lib निर्दिष्ट नहीं किया।

मैं बूस्ट डायनेमिक लाइब्रेरीज़ (.dlls) का उपयोग (और निर्मित) करने की कोशिश कर रहा था, लेकिन इसमें BOOST_ALL_DYN_LINK मैक्रो परिभाषित नहीं था। जाहिरा तौर पर एक पुस्तकालय को शामिल करने के लिए संकलन में संकेत हैं, और BOOST_ALL_DYN_LINK के बिना यह स्थिर पुस्तकालय (आवश्यक उपसर्ग के साथ) की तलाश करता है, न कि गतिशील पुस्तकालय (एक बिना उपसर्ग के)।


अभी भी केवल 1 उत्थान है, फिर भी मैं हर कुछ महीनों में खुद को यहां पाता हूं, फिर से याद दिलाया जाता है कि मेरी समस्या का समाधान क्या है !!
नील गैटेनबी

3

मेरे पास एक ही समस्या थी और मेरी गलती यह थी कि मैंने दृश्य c ++ 2010 के साथ उपयोग करने के लिए बाइनरी बूस्ट_1_55_0-msvc-11.0-32.exe स्थापित किया था जिसमें वर्जन v100 (प्रोजेक्ट प्रॉपर्टीज-> कॉन्फिगरेशनऑपरपीटीज़-> जनरल>> प्लेटफ़ॉर्मसेट) v110 नहीं है विजुअल c ++ 2012 के रूप में। इसलिए मैंने dowloaded boost_1_55_0-msvc-10.0-32.exe और अब तक सब कुछ ठीक है।


2

यदि आपको समस्या निर्माण को बढ़ावा देने में परेशानी होती है या ऐसा नहीं करना पसंद करते हैं, तो एक विकल्प यह है कि आप SourceForge से लीब फाइल डाउनलोड करें । लिंक आपको संस्करण 1.51 के लिए ज़िपित लीब और डीएलएफ फाइल के एक फ़ोल्डर में ले जाएगा। लेकिन, आपको पसंद के संस्करण को निर्दिष्ट करने के लिए लिंक को संपादित करने में सक्षम होना चाहिए। जाहिरा तौर पर BoostPro से इंस्टॉलर में कुछ समस्याएँ हैं।


2

दृश्य स्टूडियो 2015 (सामुदायिक संस्करण) में बूस्ट यूनिट परीक्षण का उपयोग करने की कोशिश करते समय मुझे एक समान समस्या थी :

घातक त्रुटि LNK1104: libboost_unit_test_framework-vc140-mt-157

इसलिए मैंने सोचा कि मैं अपना समाधान साझा करूंगा।

आप दो तरीकों से एक बूस्ट यूनिट परीक्षण परियोजना बना सकते हैं (और यह समाधान दोनों के लिए काम करता है):

  1. बूस्ट यूनिट टेस्ट एडाप्टर का उपयोग करना
  2. या Win32 कंसोल एप्लिकेशन ( यहां चरण ) बनाकर, और मुख्य फ़ंक्शन को बूस्ट यूनिट परीक्षण फ़ंक्शन ( यहां चरण ) के साथ प्रतिस्थापित कर रहा है ।

यहां दोनों परियोजनाएं प्राप्त करने के लिए मेरे द्वारा उठाए गए कदम हैं:

सबसे पहले, वांछित बढ़ावा संस्करण डाउनलोड करें (उदाहरण के लिए, बढ़ावा_1_57_0 )। आप या तो सही बायनेरिज़ के साथ बूस्ट डाउनलोड कर सकते हैं (msvc v140 का उपयोग करके संकलित), या कमांड लाइन से निम्न कमांड चलाकर खुद बायनेरिज़ को निकाल सकते हैं:

  1. bootstrap.bat
  2. "C: \ Program Files (x86) \ Microsoft विज़ुअल स्टूडियो 14.0 \ VC \ vcvarsall.bat" x86
  3. bjam - झुकना
  4. bjam -j4 --debug-प्रतीकों = on --build-type = पूर्ण टूलसेट = msvc-14.0 सूत्रण = बहु रनटाइम-लिंक = साझा पता-मॉडल = 32

जहाँ msvc-14.0 निर्दिष्ट करता है कि हमें विजुअल स्टूडियो 2015 संस्करण (VS 2015 = v14.0 = v140) की आवश्यकता है, और पता-मॉडल = 32 निर्दिष्ट करता है कि हमें प्लेटफ़ॉर्म 32 की आवश्यकता है (लेकिन 64 बिट के लिए भी ऐसा ही किया जा सकता है)।

बायनेरिज़ होने के बाद, विज़ुअल स्टूडियो पर जाएं, आपके द्वारा बनाई गई बूस्ट यूनिट परीक्षण परियोजना का चयन करें। पर जाएं प्रोजेक्ट के गुण> विन्यास (मुख्य मेनू से) और निम्न विकल्प बनाने:

  • " जनरल> प्लेटफ़ॉर्म टूलसेट " को विज़ुअल स्टूडियो 2015 (v140) पर सेट करें।

  • बूस्टर फ़ोल्डर (जैसे C: \ boost_1_57_0) और बाइनरी फ़ाइलों वाले सबफ़ोल्डर के लिए पथ को शामिल करें (जैसे C: \ boost_1_57_0 \ stage \ lib) में:

    • " C \ C ++> अतिरिक्त शामिल निर्देशिका "
    • और " लिंकर> अतिरिक्त पुस्तकालय निर्देशिकाएँ "।

1

b2 -j% cores% टूलसेट =% msvcver% पता-मॉडल = ६४ आर्किटेक्चर = x86 लिंक = स्थिर थ्रेडिंग = मल्टी रनटाइम-लिंक = शेयर्ड -बिल्ड-टाइप = न्यूनतम चरण --stagedir = स्टेज / x64

गुण → लिंकर → सामान्य → अतिरिक्त पुस्तकालय निर्देशिकाएँ $ (BOOST) \ स्टेज \ x64 \ lib


उन रेखाओं पर थोड़ा और विस्तार हो सकता है कि वे क्या कर रहे हैं और क्यों -> इस उत्तर की गुणवत्ता को बेहतर बनाने में मदद करेंगे।
एंटोन मेन्शोव

0

मेरे पास एक ही मुद्दा था। मैं एक सबफ़ोल्डर src / mainTest / से मुख्य फ़ोल्डर src में mainTest.cpp को ले जाने वाली समस्या को हल करता हूं / मुझे लगता है कि यह आपकी समस्या भी थी।


0

2>LINK : fatal error LNK1104: cannot open file 'libboost_regex-vc120-mt-sgd-1_55.lib

मेरे मामले में, बूटस्ट्रैप / बीजेएम उपलब्ध नहीं था (पुराने विरासत वाले प्रोजेक्ट पर पुस्तकालयों को पूर्वनिर्धारित और एससीएम के लिए प्रतिबद्ध किया गया था)। पुस्तकालयों में वीसी या BOOST संस्करण उनके फाइलनाम में नहीं थे उदा: libboost_regex-mt-sgd.libहालांकि, Processed /DEFAULTLIB:libboost_regex-vc120-mt-sgd-1_55.libकिसी तरह स्वचालित रूप से ट्रिगर किया गया था।

गैर-संस्करण फ़ाइल नाम को मैन्युअल रूप से जोड़कर फिक्स्ड:

<AdditionalDependencies>$(DK_BOOST)\lib64\libboost_regex-mt-sgd.lib</AdditionalDependencies>

और काली सूची में डालने ...vc120-mt-sgd-1_55.libमें

<IgnoreSpecificDefaultLibraries>libboost_regex-vc120-mt-sgd-1_55.lib</IgnoreSpecificDefaultLibraries>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.