2012-09-29 41 views
4

我是newbee到Python,並試圖玩弄用Cython與成立於 http://blog.perrygeo.net/2008/04/19/a-quick-cython-introduction/ 一個簡單的例子,在用Cython文件被命名爲c1.pyx用Cython編譯/連接在Mac OS X 10.8失敗

然後運行cython c1.pyx,這很好。 然後運行gcc -c -fPIC -I/usr/include/python2.7/ c1.c,它也沒問題。 但後來運行gcc -shared c1.o -o c1.so,它沒有經過。

任何人都可以對此有所瞭解嗎?

以下是錯誤消息:

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 

回答

4

你必須包括-lpython2.7(或者你使用任何版本的Python)的鏈接器命令行。

儘管使用Cython最簡單的方法是使用distutils安裝腳本,因爲它會爲您執行所有的編譯器命令。

另請參閱:Cython docs for building,Cython docs for compiling

+0

謝謝,它編譯正確,但仍然存在運行時錯誤。無論如何,我按照你的建議去做了這些失敗者,並且它很有效。 –