2013-04-24 25 views
9

मैं, इस परियोजना के "अतिरिक्त निर्भरता शामिल करें" "\ में शामिल हैं" जब debuging मैं निम्नलिखित त्रुटि मिलती है#काम क्यों नहीं करता है?

LINK : fatal error LNK1104: cannot open file 'python27_d.lib' 

मैंने पढ़ा सेट करने के बाद "#include <Python.h>" का उपयोग कर C++ में अजगर मॉड्यूल को चलाने के लिए कोशिश कर रहा हूँ, फिर भी, कि मुझे पायथन के विकास संस्करण को डाउनलोड करना चाहिए, लेकिन मुझे इसके लिए कोई लिंक नहीं मिला, प्लस, क्या मुझे "libs" फ़ोल्डर में कॉपी करने के लिए फ़ाइल 'python27_d.lib' की आवश्यकता नहीं है?

कृपया ध्यान दें कि मैं पाइथन के एनाकोंडा वितरण का उपयोग कर रहा हूं।

अग्रिम धन्यवाद!

+0

"सी ++ में पाइथन मॉड्यूल चलाने" का क्या मतलब है? ऐसा करने के लिए, आपको [एक पायथन दुभाषिया एम्बेड करना होगा] (http://docs.python.org/2/extending/embedding.html)। बस '# शामिल करें ' ऐसा नहीं करता है। – abarnert

+1

इस बीच, क्या आपने पढ़ा है [विंडोज़ पर बिल्डिंग सी और सी ++ एक्सटेंशन] (http://docs.python.org/2/extending/windows.html) और [लिंकिंग आवश्यकताएं] (http://docs.python.org/ 2/विस्तार/एम्बेडिंग.html # लिंकिंग-आवश्यकताएं) (एम्बेडिंग के लिए)? क्या आप अपने दुभाषिया को स्थिर रूप से, या गतिशील रूप से एम्बेड करना चाहते हैं? आपको उस दुभाषिया को कहां मिला जहां आप एम्बेड करने की कोशिश कर रहे हैं? – abarnert

+0

पायथन स्रोत कोड से पाइथन libs बनाने के लिए शायद यह आसान है। – Aya

उत्तर

6

मुझे पायथन के बारे में बहुत कुछ पता नहीं है, लेकिन संदेश इंगित करता है कि python27_d.lib या तो मौजूद नहीं है, या कम से कम मौजूद नहीं है जहां लिंकर इसकी तलाश कर रहा है।

आपने पहले से ही संकलक को समस्या को हल किया है, अब विंडोज एक्सप्लोरर के साथ python27_d.lib फ़ाइल ढूंढें और अतिरिक्त पथ लाइब्रेरी निर्भरता पथ में उस पथ को जोड़ें। यह कॉन्फ़िगरेशन के अंतर्गत है -> लिंकर -> सामान्य -> ​​अतिरिक्त लाइब्रेरी निर्देशिकाएं।

"_d" इंगित करता है कि यह एक डीबग लाइब्रेरी है, इसलिए आप इसे अपनी डीबग कॉन्फ़िगरेशन के लिए चाहते हैं, और बिना किसी रिलीज कॉन्फ़िगरेशन के "_d" (संभवतः) के बिना।

+0

धन्यवाद, तो मैं डीबग लाइब्रेरी कैसे प्राप्त करूं? – Curious

+0

आह, क्षमा करें, सोचा कि यह सिर्फ एक वीएस मुद्दा था। इसके चारों ओर देखकर प्रतीत होता है कि रिलीज (नहीं "_d") संस्करण वितरित किया गया है, लेकिन "_d" नहीं। लोगों को इसे हल करने के कुछ तरीके यहां मिले हैं: http://stackoverflow.com/questions/11311877/creating-a-dll-from-a-wrapped-cpp-file-with-swig –

+0

मैंने समाधान की कोशिश की "#define MS_NO_COREDLL "और ऐसा लगता है कि एक लाख धन्यवाद धन्यवाद :), लेकिन मुझे वास्तव में समझ में नहीं आता है कि – Curious

0

आपको जरूरी नहीं है कि आपको पाइथन डीबग बिल्ड का उपयोग करना पड़े ... [भले ही आप बूस्ट का उपयोग नहीं कर रहे हों] मैं boost.python दस्तावेज पर एक नज़र डालेगा जहां उनके पास Python.h के लिए एक रैपर है। सभी विंडोज़ डीबग मुद्दों को संभालता है, ताकि आप रिलीज पायथन डीएल के खिलाफ डीबग एक्सटेंशन बना सकें।

http://www.boost.org/doc/libs/1_53_0/libs/python/doc/building.html#id19 अजगर डिबगिंग

0

मैं सी ++ से एनाकोंडा अजगर संकुल का उपयोग करने की Boost.python इसका उपयोग करने में इसी तरह की त्रुटियों में भाग बनाता है। मुझे यह कहकर शुरू करना है कि सी ++ बूस्ट पुस्तकालयों का मेरा व्यक्तिगत प्रभाव यह है कि वे अपूर्ण दस्तावेज के साथ एक अच्छा विचार हैं। Boost.org पर दस्तावेज का एक टन है, लेकिन यह हमेशा महत्वपूर्ण विवरण छोड़ने लगता है, जो लेखक उल्लेख करने से परेशान होने के लिए बहुत तुच्छ मानते हैं। लेकिन, मुझे अपने साबुन बॉक्स से बाहर निकलने दें ...

मेरे लिए चल रहे प्रोत्साहन [उम्मीद है कि आखिरकार] बूस्ट प्राप्त करने के बारे में पता चलता है। पाइथन मेरे सिस्टम पर काम करने के लिए है कि इतने सारे महान पायथन वैज्ञानिक पैकेज हैं [ SymPy, Numpy, SciPy, matplotlib, आदि] एनाकोंडा वितरण में शामिल है और क्यूटी निर्माता के साथ निर्मित सी ++ परियोजनाओं से उन्हें एक्सेस करना वास्तव में बहुत अच्छा होगा। और बूस्ट दस्तावेज़ों का सुझाव है कि Boost.Python मेरे लिए ऐसा करना चाहिए। हां, ये दस्तावेज़ महत्वपूर्ण विवरण छोड़ने लगते हैं कि लेखक उल्लेख करने से परेशान होने के लिए बहुत ही तुच्छ मानते हैं ...

वैसे भी, मुझे एक बिल्ड त्रुटि मिली है जो दर्शाती है कि python.h नहीं मिला। मैं अपने क्यूटी निर्माता परियोजना की .pro फाइल करने के लिए इन दो बयान है, जो qmake जहां बूस्ट अपनी फ़ाइलों में शामिल हैं स्थापित किया है और बता जोड़कर वह से छुटकारा मिला जहां एनाकोंडा अपने सिस्टम पर इसके python.h फ़ाइल स्थापित:

INCLUDEPATH += C:\boost_1_55_0 
INCLUDEPATH += C:\Anaconda\include 

उसके बाद , मुझे एक एलएनके 1104 त्रुटि मिली है जो दर्शाती है कि 'python27.lib' नहीं मिला। मैंने इन दो कथनों को मेरी .pro फ़ाइल में जोड़कर छुटकारा पा लिया। पहले एनाकोंडा की python27.lib फ़ाइल कहां से qmake बताता है। दूसरा क्यूमेक कहता है कि बढ़ावा कहाँ मिलेगा।पायथन बाइनरी:

LIBS += "C:/Anaconda/libs" 
LIBS += "C:/boost_1_55_0/stage/lib/libboost_python-vc110-mt-gd-1_55.lib" 

लेकिन, जहां तक ​​मैं अब तक प्राप्त कर चुका हूं। अब मुझे एक त्रुटि मिलती है जो यह इंगित करती है कि यह फ़ाइल 'C: /Anaconda/libs.obj' नहीं खोल सकती है जिसे मैंने अभी तक ठीक नहीं पाया है। त्रुटि, निश्चित रूप से, उस फ़ाइल के कारण मौजूद नहीं है। चुनौती यह जानना है कि इसकी मांग क्यों की जा रही है और इसे कहां मिलना है।

3

डीबग के बजाय रिलीज मोड में दृश्य स्टूडियो रखें।

+0

यह वास्तव में यह उत्तर था जिसने मेरे मुद्दे को हल किया था। तो चरण थे: (1) रिलीज मोड पर सेट, डीबग नहीं, (2) लिंकर को मेरे पायथन पथ पर इंगित करने के लिए सेट करें। – rrs

19

मैं आमतौर पर डीबग बिल्ड में गैर-डीबग पायथन लिब का उपयोग कर इसे बाधित करता हूं।

#ifdef _DEBUG 
    #undef _DEBUG 
    #include <Python.h> 
    #define _DEBUG 
#else 
    #include <Python.h> 
#endif 

जहां Python.h के शामिल किए जाने के दौरान _DEBUG की परिभाषा को छिपाने: आमतौर पर, इस तरह कोड करने के लिए ले जाता है।

+1

डीओएच! यह समाधान है! बस सुनिश्चित करें कि python27_d.lib के बजाय python27.lib के साथ आपका डीबग संस्करण लिंक है। –

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