2010-05-16 13 views
10

मैं अपने एमएसवीसी निर्मित python26_d के साथ चलाने के लिए मिंगव के जीसीसी का उपयोग करके रबबीट लाइब्रेरी का डिबग बिल्ड करने की कोशिश कर रहा हूं .. मुझे बहुत सारे अपरिभाषित संदर्भ मिले हैं जो मुझे libpython26_d बनाने के लिए प्रेरित करते हैं हालांकि, अपरिभाषित संदर्भों में से एक बनी हुई है। Googling मुझे देता है:पायथन: `_imp __Py_InitModule4 'के लिए अनिर्धारित संदर्भ

http://www.techlists.org/archives/programming/pythonlist/2003-03/msg01035.shtml

लेकिन -rdynamic मदद नहीं करता है।

 
e:\MinGW/bin\gcc.exe -mno-cygwin -mdll -O -Wall -g -IE:\code\python\python\py26\ 
include -IE:\code\python\python\py26\PC -c rabbyt/rabbyt._rabbyt.c -o build\temp 
.win32-2.6-pydebug\Debug\rabbyt\rabbyt._rabbyt.o -O3 -fno-strict-aliasing 
rabbyt/rabbyt._rabbyt.c:1351: warning: '__Pyx_SetItemInt' defined but not used 
writing build\temp.win32-2.6-pydebug\Debug\rabbyt\_rabbyt_d.def 

e:\MinGW/bin\gcc.exe -mno-cygwin -shared -g build\temp.win32-2.6-pydebug\Debug\r 
abbyt\rabbyt._rabbyt.o build\temp.win32-2.6-pydebug\Debug\rabbyt\_rabbyt_d.def - 
LE:\code\python\python\py26\libs -LE:\code\python\python\py26\PCbuild -lopengl32 
-lglu32 -lpython26_d -lmsvcr90 -o build\lib.win32-2.6-pydebug\rabbyt\_rabbyt_d. 
pyd 
build\temp.win32-2.6-pydebug\Debug\rabbyt\rabbyt._rabbyt.o: In function `init_ra 
bbyt': 

E:/code/python/rabbyt/rabbyt/rabbyt._rabbyt.c:1121: undefined reference to `_imp 
__Py_InitModule4' 
+0

python_d setup.py build --debug -c mingw32 कमांड लाइन – Mark

+0

है आधिकारिक विन्डोज़ पायथन बिल्ड (या कोई अन्य एमएसवीसी बिल्ड) के साथ मिनगब्लू (या इसके किसी भी फोर्क) का उपयोग करने की अनुशंसा नहीं की जाती है, कारण बताए गए कारणों से https://bugs.python.org/issue4709#msg243605 पर। – mhsmith

उत्तर

2

मेरा सिगविन और मिनजीडब्ल्यू जीसीसी इंस्टॉल एक दूसरे के साथ विवादित थे। मैंने उन्हें दोनों और स्थापित मिनीजीडब्ल्यू और साइगविन को जीसीसी के बिना हटा दिया और इस समस्या को हल किया।

3

यदि आपने डीबगिंग (_DEBUG मैक्रो परिभाषित किया गया है) के लिए संकलित ऑब्जेक्ट कोड को मिश्रित करने का प्रयास किया है तो मैंने यह देखा है (गैर-डीबग ऑब्जेक्ट्स (_DEBUG परिभाषित नहीं किया गया है)।

यदि आप वस्तुओं को मिलाते हैं तो "लिंक-टाइम त्रुटि" (! एसआईसी) ट्रिगर करने के लिए पाइथन कोर कोड में #defines Py_InitModule4 एक अन्य नाम (Py_InitModule4TraceRefs) में एक पंक्ति है।

सुनिश्चित करें कि आप डिबगिंग और इसके विपरीत के लिए संकलित करते समय एक पायथन डीबग लाइब्रेरी के खिलाफ लिंक करते हैं।

20

यदि कोई भी इस त्रुटि संदेश में आता है, लेकिन एक अलग स्थिति में: -D MS_WIN64 को अपनी कमांड लाइन में जोड़ने का प्रयास करें, यह मेरे लिए काम करता है!

+0

यह मेरा फिक्स भी था। धन्यवाद! –

+0

@tiho हाय, मुझे http://stackoverflow.com/questions/18956136/how-to-use-boost-python-vc110-mt-gd-1-54-lib-in-c पर एक समान समस्या है इस के साथ मेरी मदद करो? मेरे मामले में, मैं कमांड लाइन के साथ बाइनरी बनाने के लिए बूस्ट का उपयोग नहीं कर रहा हूं। मैं बस एक हैलो वर्ल्ड उदाहरण बनाने की कोशिश कर रहा हूं। यह बहुत आसान होना चाहिए, लेकिन अब यह मुझे पागल कर दिया गया है ... धन्यवाद। – ChangeMyName

14

फ़ाइल C:\Python27\Lib\distutils\cygwinccompiler.py, जो MinGW संकलक सेटिंग होती हैं में, Mingw32CCompiler वर्ग पाते हैं:

self.set_executables(compiler='gcc -O -Wall', 
    compiler_so='gcc -mdll -O -Wall', 
    compiler_cxx='g++ -O -Wall', 
    linker_exe='gcc ', 
    linker_so='%s %s %s' 
     % (self.linker_dll, shared_option, 
     entry_point)) 

और compiler_so तर्क को -D MS_WIN64 जोड़ें:

compiler_so='gcc -mdll -O -Wall -D MS_WIN64' 
+0

वाह एक गुच्छा धन्यवाद! – huseyint

+2

आपके स्थापित distutils मॉड्यूल के साथ गड़बड़ करने की कोई ज़रूरत नहीं है। Setup.py में सेटअप कॉल के लिए तर्क के रूप में बस 'define_macros = [(' MS_WIN64 ', कोई नहीं)] जोड़ें। – nmgeek

3

मैं सिर्फ जोड़कर इस समस्या का समाधान कंपाइलर ध्वज -DPy_TRACE_DEFS। मेरे मामले में मैं एसआईपी/पीईक्यूटी के डीबग संस्करण बनाने की कोशिश कर रहा था।

त्रुटि तब हो सकती है जब पाइथन का डीबग संस्करण Py_TRACE_DEFS विकल्प के साथ संकलित किया गया हो। यह परिणामस्वरूप python2x_d लाइब्रेरी को के बजाय Py_InitModule4TraceRefs फ़ंक्शन का कारण बनता है जो संकलक (अन्य परिवर्तनों के साथ) ढूंढ रहा है। आपके द्वारा बनाई जा रही परियोजना के लिए विकल्प को स्विच करना सुनिश्चित करता है कि उत्पादित कोड संगत है, और Py_InitModule4 का सही संस्करण पाया गया है।

Py_TRACE_DEFS पर अधिक जानकारी पाइथन स्रोत फ़ोल्डर या here में Misc/SpecialBuilds.txt में पाई जा सकती है।

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