I am new to python and try to play with Cython with a simple example based on http://blog.perrygeo.net/2008/04/19/a-quick-cython-introduction/ The cython file is called c1.pyx
Then run cython c1.pyx , that was good. Then run gcc -c -fPIC -I/usr/include/python2.7/ c1.c , which is good too. But then run gcc -shared c1.o -o c1.so it failed.
Can anyone shed some light on this?
Here is the error message:
Undefined symbols for architecture x86_64: "_PyCFunction_NewEx", referenced from: _initc1 in cc5xSgOI.o "_PyCode_New", referenced from: ___Pyx_AddTraceback in cc5xSgOI.o _initc1 in cc5xSgOI.o "_PyDict_GetItem", referenced from: ___pyx_pw_2c1_1great_circle in cc5xSgOI.o "_PyDict_New", referenced from: _initc1 in cc5xSgOI.o "_PyDict_Next", referenced from: ___pyx_pw_2c1_1great_circle in cc5xSgOI.o "_PyDict_Size", referenced from: ___pyx_pw_2c1_1great_circle in cc5xSgOI.o "_PyErr_Clear", referenced from: ___Pyx_GetName in cc5xSgOI.o "_PyErr_Format", referenced from: ___Pyx_RaiseArgtupleInvalid.constprop.5 in cc5xSgOI.o ___pyx_pw_2c1_1great_circle in cc5xSgOI.o "_PyErr_Occurred", referenced from: ___pyx_pw_2c1_1great_circle in cc5xSgOI.o _initc1 in cc5xSgOI.o "_PyErr_SetObject", referenced from: ___Pyx_GetName in cc5xSgOI.o "_PyErr_SetString", referenced from: _initc1 in cc5xSgOI.o "_PyErr_WarnEx", referenced from: _initc1 in cc5xSgOI.o "_PyExc_ImportError", referenced from: _initc1 in cc5xSgOI.o "_PyExc_NameError", referenced from: ___Pyx_GetName in cc5xSgOI.o "_PyExc_TypeError", referenced from: ___Pyx_RaiseArgtupleInvalid.constprop.5 in cc5xSgOI.o ___pyx_pw_2c1_1great_circle in cc5xSgOI.o "_PyFloat_AsDouble", referenced from: ___pyx_pw_2c1_1great_circle in cc5xSgOI.o "_PyFloat_FromDouble", referenced from: ___pyx_pw_2c1_1great_circle in cc5xSgOI.o "_PyFloat_Type", referenced from: ___pyx_pw_2c1_1great_circle in cc5xSgOI.o "_PyFrame_New", referenced from: ___Pyx_AddTraceback in cc5xSgOI.o "_PyImport_AddModule", referenced from: _initc1 in cc5xSgOI.o "_PyInt_FromLong", referenced from: _initc1 in cc5xSgOI.o "_PyList_New", referenced from: _initc1 in cc5xSgOI.o "_PyMem_Malloc", referenced from: ___Pyx_AddTraceback in cc5xSgOI.o "_PyMem_Realloc", referenced from: ___Pyx_AddTraceback in cc5xSgOI.o "_PyModule_GetDict", referenced from: ___Pyx_AddTraceback in cc5xSgOI.o _initc1 in cc5xSgOI.o "_PyNumber_Add", referenced from: ___pyx_pw_2c1_1great_circle in cc5xSgOI.o "_PyNumber_Multiply", referenced from: ___pyx_pw_2c1_1great_circle in cc5xSgOI.o "_PyOS_snprintf", referenced from: _initc1 in cc5xSgOI.o "_PyObject_Call", referenced from: ___pyx_pw_2c1_1great_circle in cc5xSgOI.o "_PyObject_CallFunctionObjArgs", referenced from: _initc1 in cc5xSgOI.o "_PyObject_GetAttr", referenced from: ___Pyx_GetName in cc5xSgOI.o ___pyx_pw_2c1_1great_circle in cc5xSgOI.o "_PyObject_GetAttrString", referenced from: _initc1 in cc5xSgOI.o "_PyObject_SetAttr", referenced from: _initc1 in cc5xSgOI.o "_PyObject_SetAttrString", referenced from: _initc1 in cc5xSgOI.o "_PyString_AsString", referenced from: ___pyx_pw_2c1_1great_circle in cc5xSgOI.o "_PyString_FromFormat", referenced from: ___Pyx_AddTraceback in cc5xSgOI.o "_PyString_FromString", referenced from: ___Pyx_AddTraceback in cc5xSgOI.o "_PyString_FromStringAndSize", referenced from: _initc1 in cc5xSgOI.o "_PyString_InternFromString", referenced from: _initc1 in cc5xSgOI.o "_PyString_Type", referenced from: ___pyx_pw_2c1_1great_circle in cc5xSgOI.o "_PyTraceBack_Here", referenced from: ___Pyx_AddTraceback in cc5xSgOI.o "_PyTuple_New", referenced from: ___pyx_pw_2c1_1great_circle in cc5xSgOI.o _initc1 in cc5xSgOI.o "_PyUnicodeUCS2_DecodeUTF8", referenced from: _initc1 in cc5xSgOI.o "_Py_GetVersion", referenced from: _initc1 in cc5xSgOI.o "_Py_InitModule4_64", referenced from: _initc1 in cc5xSgOI.o "__PyString_Eq", referenced from: ___pyx_pw_2c1_1great_circle in cc5xSgOI.o "__PyThreadState_Current", referenced from: ___Pyx_AddTraceback in cc5xSgOI.o ld: symbol(s) not found for architecture x86_64 collect2: error: ld returned 1 exit status