Errores de enlace al comstackr el módulo de extensión de python

Así que estoy escribiendo un módulo de extensión de python en C y estoy tratando de comstackrlo para mi comstackción de Python de 64 bits. Después de golpear mi cabeza contra MinGW por un tiempo, hice algunas búsquedas en Google y descubrí que MinGW no hace módulos de extensión de 64 bits, así que configuré Visual C ++ 2008 Express con el SDK de Win7 y DISTUTILS_USE_SDK y MSSdk, ambos iguales a En las respuestas a esta pregunta .

Finalmente conseguí que Distutils encontrara los comstackdores, pero cuando compilo la extensión obtengo esta salida:

core.obj : error LNK2019: unresolved external symbol __imp__PyErr_NoMemory refer enced in function "int __cdecl handleErrors(int)" (?handleErrors@@YAHH@Z) core.obj : error LNK2019: unresolved external symbol __imp__PyErr_SetString refe renced in function "int __cdecl handleErrors(int)" (?handleErrors@@YAHH@Z) core.obj : error LNK2019: unresolved external symbol _opus_encoder_destroy refer enced in function "void __cdecl OpusEncoder_dealloc(struct OpusEncoderObject *)" (?OpusEncoder_dealloc@@YAXPAUOpusEncoderObject@@@Z) core.obj : error LNK2019: unresolved external symbol __imp__Py_BuildValue refere nced in function "int __cdecl OpusEncoder_init(struct OpusEncoderObject *,struct _object *,struct _object *)" (?OpusEncoder_init@@YAHPAUOpusEncoderObject@@PAU_o bject@@1@Z) core.obj : error LNK2019: unresolved external symbol _opus_encoder_create refere nced in function "int __cdecl OpusEncoder_init(struct OpusEncoderObject *,struct _object *,struct _object *)" (?OpusEncoder_init@@YAHPAUOpusEncoderObject@@PAU_o bject@@1@Z) core.obj : error LNK2019: unresolved external symbol __imp__PyArg_ParseTupleAndK eywords referenced in function "int __cdecl OpusEncoder_init(struct OpusEncoderO bject *,struct _object *,struct _object *)" (?OpusEncoder_init@@YAHPAUOpusEncode rObject@@PAU_object@@1@Z) core.obj : error LNK2019: unresolved external symbol __imp__PyTuple_Pack referen ced in function "struct _object * __cdecl OpusEncoder_encode(struct OpusEncoderO bject *,struct _object *)" (?OpusEncoder_encode@@YAPAU_object@@PAUOpusEncoderObj ect@@PAU1@@Z) core.obj : error LNK2019: unresolved external symbol __imp__PyString_FromString referenced in function "struct _object * __cdecl OpusEncoder_encode(struct OpusE ncoderObject *,struct _object *)" (?OpusEncoder_encode@@YAPAU_object@@PAUOpusEnc oderObject@@PAU1@@Z) core.obj : error LNK2019: unresolved external symbol _opus_encode_float referenc ed in function "struct _object * __cdecl OpusEncoder_encode(struct OpusEncoderOb ject *,struct _object *)" (?OpusEncoder_encode@@YAPAU_object@@PAUOpusEncoderObje ct@@PAU1@@Z) core.obj : error LNK2019: unresolved external symbol __imp__PyFloat_AsDouble ref erenced in function "struct _object * __cdecl OpusEncoder_encode(struct OpusEnco derObject *,struct _object *)" (?OpusEncoder_encode@@YAPAU_object@@PAUOpusEncode rObject@@PAU1@@Z) core.obj : error LNK2019: unresolved external symbol __imp__PyType_IsSubtype ref erenced in function "struct _object * __cdecl OpusEncoder_encode(struct OpusEnco derObject *,struct _object *)" (?OpusEncoder_encode@@YAPAU_object@@PAUOpusEncode rObject@@PAU1@@Z) core.obj : error LNK2019: unresolved external symbol __imp__PyFloat_Type referen ced in function "struct _object * __cdecl OpusEncoder_encode(struct OpusEncoderO bject *,struct _object *)" (?OpusEncoder_encode@@YAPAU_object@@PAUOpusEncoderObj ect@@PAU1@@Z) core.obj : error LNK2019: unresolved external symbol _opus_encode referenced in function "struct _object * __cdecl OpusEncoder_encode(struct OpusEncoderObject * ,struct _object *)" (?OpusEncoder_encode@@YAPAU_object@@PAUOpusEncoderObject@@PA U1@@Z) core.obj : error LNK2019: unresolved external symbol __imp__PyErr_Occurred refer enced in function "struct _object * __cdecl OpusEncoder_encode(struct OpusEncode rObject *,struct _object *)" (?OpusEncoder_encode@@YAPAU_object@@PAUOpusEncoderO bject@@PAU1@@Z) core.obj : error LNK2019: unresolved external symbol __imp__PyInt_AsLong referen ced in function "struct _object * __cdecl OpusEncoder_encode(struct OpusEncoderO bject *,struct _object *)" (?OpusEncoder_encode@@YAPAU_object@@PAUOpusEncoderObj ect@@PAU1@@Z) core.obj : error LNK2019: unresolved external symbol __imp__PyArg_ParseTuple ref erenced in function "struct _object * __cdecl OpusEncoder_encode(struct OpusEnco derObject *,struct _object *)" (?OpusEncoder_encode@@YAPAU_object@@PAUOpusEncode rObject@@PAU1@@Z) core.obj : error LNK2019: unresolved external symbol __imp__PyModule_AddObject r eferenced in function _initopys core.obj : error LNK2019: unresolved external symbol __imp__PyErr_NewException r eferenced in function _initopys core.obj : error LNK2019: unresolved external symbol __imp__Py_InitModule4 refer enced in function _initopys core.obj : error LNK2019: unresolved external symbol __imp__PyType_Ready referen ced in function _initopys core.obj : error LNK2019: unresolved external symbol __imp__PyType_GenericNew re ferenced in function _initopys core.obj : error LNK2019: unresolved external symbol __imp__Py_Initialize refere nced in function _main core.obj : error LNK2019: unresolved external symbol __imp__Py_SetProgramName re ferenced in function _main build\lib.win-amd64-2.7\opys.pyd : fatal error LNK1120: 23 unresolved externals error: command '"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\link. exe"' failed with exit status 1120 

He golpeado una pared aquí después de golpear mi cabeza contra esto durante 3 días, ¿algún consejo?

En mi experiencia, es muy difícil construir módulos de Python en Windows con cualquier cosa de Microsoft, excepto la versión completa de Visual C ++. Además, la versión de Visual Studio debe coincidir con la versión que se usó para construir su distribución de Python.

Por ejemplo, con el dist oficial binario de Python 2.7.1:

 C:\Python27>python Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on win32 ... 

De acuerdo con ¿Con qué versión de Visual Studio se comstack Python en mi computadora? , eso significa que Python fue construido con Visual C ++ 2008.

Para cada versión de Visual Studio, hay una versión correspondiente del SDK de Windows, por lo que si desea intentar que esto funcione con herramientas gratuitas, debe encontrar e instalar la versión correcta del SDK de Windows. Creo que podría ser http://www.microsoft.com/en-us/download/details.aspx?id=24826 , pero no estoy 100% seguro.

Yo tenía el mismo error. Instalar psycopg2 desde https://github.com/nwcell/psycopg2-windows solucionó mi problema

En mi caso, cambiar las propiedades del proyecto en Visual studio (construir una solución para x64 en lugar de x86) ayudó, ya que la versión de Python que estaba usando era de 64 bits. Ambas versiones deberán coincidir.

1 、 debe asegurarse de que python x64 、 oracle client x64 (win7 x64 ,, todas las versiones deben coincidir.

2 、 quizás tenga que “instalar vc ++ para python2.7”