python linker extension-modules

Vinculación de errores al compilar el módulo de extensión de Python



cython (4)

Yo tenía el mismo error. La instalación de psycopg2 desde https://github.com/nwcell/psycopg2-windows resolvió mi problema

Así que estoy escribiendo un módulo de extensión de Python en C y estoy tratando de compilarlo para mi compilación de Python de 64 bits. Después de golpear mi cabeza contra MinGW por un tiempo, busqué en Google y descubrí que MinGW no tiene módulos de extensión de 64 bits, así que configuré Visual C ++ 2008 Express con Win7 SDK y DISTUTILS_USE_SDK y MSSdk ambos iguales a 1 como en las respuestas a esta pregunta .

Finalmente conseguí que Distutils buscara los compiladores, 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 un muro aquí después de golpearme la cabeza con esto durante 3 días, ¿algún consejo?


Para mi caso, cambiar las propiedades del proyecto en Visual Studio (construir solución para x64 en vez de x86) me 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, tal vez tienes que "instalar vc ++ para python2.7"


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 binario oficial 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 ¿En qué versión de Visual Studio está compilado Python en mi computadora? , eso significa que Python fue desarrollado 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, necesita encontrar e instalar la versión correcta de Windows SDK. Creo que podría ser http://www.microsoft.com/en-us/download/details.aspx?id=24826 , pero no estoy 100% seguro.