Nicht aufgelöste externe Symbole Gebäude C-Erweiterung für Python
Ich versuche momentan bauen eine C-Erweiterung in Windows. Der Fehler scheint im Zusammenhang zu finden nicht "standard" - Symbole in der python27.dll. Wie löse ich diese Symbole fehlen? Muss ich irgendwie sagen dem compiler, wo zu finden python27.dll oder ist etwas falsch mit meinem python27.lib?
Mein setup ist Folgendes:
- Windows 7 64-bit
- Python 2.7.4
- Numpy 1.7
- Schluck 2.0.9
- Visual studio 9.0
Fand ich diesen link, der scheinbar ein ähnliches problem, aber mit Versionen von Dingen, die ich nicht verwende: http://bugs.python.org/issue15772
Ich bin mit python setup.py build_ext --inplace
zum Bau der Erweiterung.
Den setup.py sieht aus wie die folgenden:
try:
numpy_include = numpy.get_include()
except AttributeError:
numpy_include = numpy.get_numpy_include()
fmm3d_module = Extension('_fmm3d', sources=['fmm3d.i', 'fmm3d.c'],
include_dirs = [numpy_include])
Alles kompiliert fein und führt dann den folgenden link-Befehl:
C:\Program Files (x86)\Microsoft Visual Studio 9.\VC\BIN\link.exe /DLL /nologo /INCREMENTAL:NO /LIBPATH:C:\Python27\libs /LIBPATH:C:\Python27\PCbuild\ amd64 /EXPORT:init_fmm3d build\temp.win-amd64-2.7\Release\fmm3d_wrap.obj build\temp.win-amd64-2.7\Release\fmm3d.obj /OUT:C:\Users\luke\Documents\Ranking\code\_fmm3d.pyd /IMPLIB:build\temp.win-amd64-2.7\Release\_fmm3d.lib /MANIFESTFILE:build\temp.win-amd64-2.7\Release\_fmm3d.pyd.manifest
Link bekomme ich Fehler im Zusammenhang mit Python-Symbole wie die folgenden:
fmm3d_wrap.obj : error LNK2019: unresolved external symbol __imp__PyString_AsString referenced in function _SWIG_Python_str_AsChar
fmm3d_wrap.obj : error LNK2019: unresolved external symbol __imp__PyString_FromString referenced in function _SWIG_Python_str_FromChar
fmm3d_wrap.obj : error LNK2019: unresolved external symbol __imp__PyExc_RuntimeError referenced in function _SWIG_Python_ErrorType
fmm3d_wrap.obj : error LNK2019: unresolved external symbol __imp__PyExc_AttributeError referenced in function _SWIG_Python_ErrorType
Ich habe festgestellt, das Python-lib-Datei befindet sich auf C:Python27\libs\python27.lib. Ich nehme an, die Symbole sind erwartet zu sein in hier. In der Tat, es sieht aus wie Sie sind mindestens auf die in dieser Datei. Zum Beispiel, läuft dumpbin -headers C:\Python27\libs\python27.lib
zeigt der folgende Codeausschnitt:
Version : 0
Machine : 8664 (x64)
TimeDateStamp: 5160619D Sat Apr 06 12:55:41 2013
SizeOfData : 0000001F
DLL name : python27.dll
Symbol name : PyString_AsString
Type : code
Name type : name
Hint : 629
Name : PyString_AsString
Dies führt mich zu glauben, dass die python27.lib sagt die Referenz für PyString_AsString ist enthalten in python27.dll.
Gibt es einige andere command-line-argument fehlt mir die Suche nach diesen Symbolen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollte es eine python27.lib in der Kommandozeile angeben. Ihre dumpbin zeigt Ihre python ist 64-bit, wahrscheinlich ist dein VC++ - compiler 32 bit.