Wie kann ich meine C-Erweiterungen mit MinGW-w64 in Python erstellen?
Daher habe ich ein paar Python C-Erweiterungen, die ich zuvor für 32-Bit-Python unter Win7 erstellt und verwendet habe. Ich habe jetzt jedoch auf 64-Bit-Python umgestellt und habe Probleme beim Erstellen der C-Erweiterung mit MinGW-w64.
Ich habe die Änderungen an distutils gemäß vorgenommendieser Beitrag, aber ich bekomme einige seltsame Fehler, die darauf hindeuten, dass etwas nicht stimmt:
$ 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
Ich habe einiges gegoogelt, um Informationen zu finden, aber es ist nicht einfach, eine eindeutige Antwort zu finden. Könnte jemand etwas Licht ins Dunkel bringen? Welche weiteren Änderungen sollte ich vornehmen, um C-Erweiterungen für 64-Bit-Python in Win7 erfolgreich erstellen zu können?
BEARBEITEN:
Nach einigen hilfreichen Hinweisen in den Kommentaren von cgohlke gelang es mir, sie zu generierenlibpython27.a
. Jedoch nach Befolgung des Hinweises aufdieser Beitrag (Vorletzter) Ich hatte noch einen__imp_Py_InitModule4_64
Error. Nach einigem ernsthaften Google-Fu schaffte ich es zu stolperndieser Beitrag Ich soll das umbenennenPy_InitModule4
Linie zuPy_InitModule4_64
. Danach hat alles gut geklappt.