तो मेरे पास कुछ पायथन सी एक्सटेंशन हैं जिन्हें मैंने पहले बनाया है और 32 बिट पायथन में Win7 में चल रहा है। हालांकि अब मैंने 64 बिट पायथन पर स्विच किया है, और मुझे सीजी एक्सटेंशन को मिनजीडब्ल्यू-डब्ल्यू 64 के साथ बनाने में समस्याएं हैं।मैं पायथन में MinGW-w64 के साथ अपने सी एक्सटेंशन कैसे बना सकता हूं?
मैं प्रति this post distutils के रूप में परिवर्तन किए हैं, लेकिन मैं कुछ सुझाव दे कुछ अजीब त्रुटियों हो रही है गलत है:
$ python setup.py build
running build
running build_ext
building 'MyLib' extension
c:\MinGW64\bin\x86_64-w64-mingw32-gcc.exe -mdll -O -Wall -Ic:\Python27\lib\site-packages\numpy\core\include -Ic:\Python27\include -Ic:\Python27\PC -c MyLib.c -o build\temp.win-amd64-2.7\Release\mylib.o
MyLib.c: In function 'initMyLib':
MyLib.c:631:5: warning: implicit declaration of function 'Py_InitModule4_64' [-Wimplicit-function-declaration]
writing build\temp.win-amd64-2.7\Release\MyLib.def
c:\MinGW64\bin\x86_64-w64-mingw32-gcc.exe -shared -s build\temp.win-amd64-2.7\Release\mylib.o build\temp.win-amd64-2.7\Release\MyLib.def -Lc:\Python27\libs -Lc:\Python27\PCbuild\amd64 -lpython27 -o build\lib.win-amd64-2.7\MyLib.pyd
build\temp.win-amd64-2.7\Release\mylib.o:MyLib.c:(.text+0x13d): undefined reference to `__imp_PyExc_ValueError'
build\temp.win-amd64-2.7\Release\mylib.o:MyLib.c:(.text+0x1275): undefined reference to `__imp_PyExc_ValueError'
build\temp.win-amd64-2.7\Release\mylib.o:MyLib.c:(.text+0x1eef): undefined reference to `__imp_PyExc_ImportError'
build\temp.win-amd64-2.7\Release\mylib.o:MyLib.c:(.text+0x1f38): undefined reference to `__imp_PyExc_AttributeError'
build\temp.win-amd64-2.7\Release\mylib.o:MyLib.c:(.text+0x1f4d): undefined reference to `__imp_PyCObject_Type'
build\temp.win-amd64-2.7\Release\mylib.o:MyLib.c:(.text+0x1f61): undefined reference to `__imp_PyExc_RuntimeError'
build\temp.win-amd64-2.7\Release\mylib.o:MyLib.c:(.text+0x1fc7): undefined reference to `__imp_PyExc_RuntimeError'
build\temp.win-amd64-2.7\Release\mylib.o:MyLib.c:(.text+0x1ffe): undefined reference to `__imp_PyExc_RuntimeError'
build\temp.win-amd64-2.7\Release\mylib.o:MyLib.c:(.text+0x2042): undefined reference to `__imp_PyExc_RuntimeError'
build\temp.win-amd64-2.7\Release\mylib.o:MyLib.c:(.text+0x206c): undefined reference to `__imp_PyExc_RuntimeError'
build\temp.win-amd64-2.7\Release\mylib.o:MyLib.c:(.text+0x208a): more undefined references to `__imp_PyExc_RuntimeError' follow
build\temp.win-amd64-2.7\Release\mylib.o:MyLib.c:(.text+0x20a7): undefined reference to `__imp_PyExc_ImportError'
collect2.exe: error: ld returned 1 exit status
error: command 'x86_64-w64-mingw32-gcc' failed with exit status 1
मैं जानकारी प्राप्त करने के काफ़ी आसपास googled है, लेकिन यह पता लगाने के लिए आसान नहीं है एक निश्चित जवाब। क्या कोई इस पर कुछ प्रकाश डाल सकता है? Win7 में 64 बिट पायथन के लिए सफलतापूर्वक सी एक्सटेंशन बनाने में सक्षम होने के लिए मुझे और क्या परिवर्तन करना चाहिए?
संपादित करें:
cgohlke की टिप्पणी में कुछ उपयोगी संकेत नीचे मैं libpython27.a
उत्पन्न करने में कामयाब होने के बाद। हालांकि this post (2 से आखिरी) पर सलाह का पालन करने के बाद भी मुझे __imp_Py_InitModule4_64
त्रुटि मिली। कुछ गंभीर Google-fu के बाद मैं this post पर यात्रा करने में कामयाब रहा, मुझे Py_InitModule4
लाइन का नाम Py_InitModule4_64
पर पुनर्नामित करने में कहा गया। उसके बाद सब कुछ तैराकी से काम किया।
आपको 'gendef.exe python27.dll' और 'dlltool.exe --dllname python27.dll --def python27.def --output-lib libpython27.a' के साथ' libpython27.a' बनाने की आवश्यकता है और इसे रखें 'सी: \ Python27 \ libs' – cgohlke
में मैंने कुछ पदों को गेंडफ का उल्लेख किया। लेकिन libpython27.a फ़ाइल पीढ़ी के बारे में जानकारी कैसे प्राप्त करना आसान नहीं है। क्या आप किसी के बारे में जानना चाहते हैं? – c00kiemonster
ओह ठीक है, gendef और dlltool दो अलग-अलग कमांड हैं। कोशिश करेंगे। धन्यवाद। – c00kiemonster