2017-07-28 68 views
0

我想構建Cython嘗試通過嘗試將Cython與C頭鏈接來從python調用C函數。 當我嘗試使用此命令構建Python未能構建使用distutils的Cython模塊

python setup.py build_ext --inplace 

它顯示了這個錯誤:

 
running build_ext 
building 'cython' extension 
/usr/bin/clang -fno-strict-aliasing -fno-common -dynamic -arch i386 -arch x86_64 -g -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c cython.c -o build/temp.macosx-10.6-intel-2.7/cython.o 
cython.c:692:14: error: typedef redefinition with different types ('void' vs 
     'struct _typeobject') 
typedef void PyTypeObject; 
      ^
/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/object.h:411:3: note: 
     previous definition is here 
} PyTypeObject; 
^
1 error generated. 
error: command '/usr/bin/clang' failed with exit status 1 

編輯:我cython.pyx看起來是這樣的:

 
cdef extern from "rnafoldenergy.h": 
    float dostuff(int maxw, char *sequence2, char *sequence3, float *freeenergy) 



cpdef int dothings(): 
    print "Hello!" 

    cdef int maxw = 50 

    cdef float freeenergyarray[3] 
    freeenergyarray[:] = [0, 0, 0] 
    cdef char* sequence2 = "AAACATTGAAAATAAGAGTACATGAAGGATATGAGGAATTCACAATGGTTGGGCGAAGAGCAACAGCCATTCTAAGGAAAGCAACCAGAAGACTGATCCAACTGATAGTGAGTGGGAAAG" 
    cdef char* sequence3 = "ATCCTTCATGTACTCTTATTTTCAATGTTTATAAAAGAGGAGAAATATAAAATGTGAAAATAAAACCTGGCGGCAGCGCAAAAG" 

    cdef float interactenergy=0 


    interactenergy=dostuff(maxw=maxw, sequence2=sequence2, sequence3=sequence3, freeenergy=freeenergyarray) 


    print "A: %f, B: %f, AB: %f, Interact: %f" % (freeenergyarray[0],freeenergyarray[1],freeenergyarray[2],interactenergy) 

    return 0 
+0

cython.pyx中有什麼?沒有它,這個問題可能無法回答。 – DavidW

+0

增加了cython.pyx – Edenapple

+0

你的安裝文件是怎樣的? – ead

回答

2

我認爲這是因爲你已經調用了你的文件「cython.pyx」。我可以用一個名爲「cython.pyx」的文件重現你的錯誤,但是如果我將它重命名爲其他東西,那麼我不會得到typedef void PyTypeObject;這一行,所以不要錯誤。

這是一個神祕的原因,爲什麼這會產生確切的錯誤,但考慮到已經有一個名爲「cython」的模塊(您正在使用...)似乎不是一個好主意,不要調用您的模塊相同的東西。

+0

非常感謝! – Edenapple

+0

@Edenapple如果這個答案解決了你的問題,你應該接受它 – ead