Python Can';t安装Kivy:Cython/GCC错误

Python Can';t安装Kivy:Cython/GCC错误,python,c,gcc,cython,kivy,Python,C,Gcc,Cython,Kivy,因此,我尝试按照官方网站的说明安装Kivy: $ sudo apt-get install python-setuptools python-pygame python-opengl \ python-gst0.10 python-enchant gstreamer0.10-plugins-good python-dev \ build-essential libgl1-mesa-dev libgles2-mesa-dev python-pip $ sudo pip install -

因此,我尝试按照官方网站的说明安装Kivy:

$ sudo apt-get install python-setuptools python-pygame python-opengl \
  python-gst0.10 python-enchant gstreamer0.10-plugins-good python-dev \
  build-essential libgl1-mesa-dev libgles2-mesa-dev python-pip

$ sudo pip install --upgrade cython

$ sudo easy_install kivy
这就是我得到的:

Searching for kivy
Reading http://pypi.python.org/simple/kivy/
Best match: Kivy 1.4.1
Downloading http://pypi.python.org/packages/source/K/Kivy/Kivy-1.4.1.tar.gz#md5=94bba894269e4bdecc7881f256367e01
Processing Kivy-1.4.1.tar.gz
Running Kivy-1.4.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-MMi2Fv/Kivy-1.4.1/egg-dist-tmp-EcKbfC
[INFO   ] Kivy v1.4.1
Found GLES 2.0 headers at /usr/include/GLES2/gl2.h
Build configuration is:
 * use_opengl_es2  =  True
 * use_glew  =  False
 * use_opengl_debug  =  False
 * use_mesagl  =  False
Generate config.h
Generate config.pxi
/tmp/easy_install-MMi2Fv/Kivy-1.4.1/kivy/graphics/transformation.c: In function ‘__pyx_f_4kivy_8graphics_14transformation_6Matrix_identity’:
/tmp/easy_install-MMi2Fv/Kivy-1.4.1/kivy/graphics/transformation.c:2774:13: error: incompatible types when assigning to type ‘__pyx_t_4kivy_8graphics_14transformation_matrix_t’ from type ‘double *’
/tmp/easy_install-MMi2Fv/Kivy-1.4.1/kivy/graphics/transformation.c: In function ‘__pyx_f_4kivy_8graphics_14transformation_6Matrix_inverse’:
/tmp/easy_install-MMi2Fv/Kivy-1.4.1/kivy/graphics/transformation.c:2978:13: error: incompatible types when assigning to type ‘__pyx_t_4kivy_8graphics_14transformation_matrix_t’ from type ‘double *’
/tmp/easy_install-MMi2Fv/Kivy-1.4.1/kivy/graphics/transformation.c:2980:13: error: incompatible types when assigning to type    ‘__pyx_t_4kivy_8graphics_14transformation_matrix_t’ from type ‘double *’
/tmp/easy_install-MMi2Fv/Kivy-1.4.1/kivy/graphics/transformation.c: In function ‘__pyx_f_4kivy_8graphics_14transformation_6Matrix_multiply’:
/tmp/easy_install-MMi2Fv/Kivy-1.4.1/kivy/graphics/transformation.c:3364:13: error: incompatible types when assigning to type ‘__pyx_t_4kivy_8graphics_14transformation_matrix_t’ from type ‘double *’
/tmp/easy_install-MMi2Fv/Kivy-1.4.1/kivy/graphics/transformation.c:3366:13: error: incompatible types when assigning to type ‘__pyx_t_4kivy_8graphics_14transformation_matrix_t’ from type ‘double *’
/tmp/easy_install-MMi2Fv/Kivy-1.4.1/kivy/graphics/transformation.c:3368:13: error: incompatible types when assigning to type ‘__pyx_t_4kivy_8graphics_14transformation_matrix_t’ from type ‘double *’
/tmp/easy_install-MMi2Fv/Kivy-1.4.1/kivy/graphics/transformation.c: In function ‘__pyx_pf_4kivy_8graphics_14transformation_6Matrix_20__str__’:
/tmp/easy_install-MMi2Fv/Kivy-1.4.1/kivy/graphics/transformation.c:3674:13: error: incompatible types when assigning to type ‘__pyx_t_4kivy_8graphics_14transformation_matrix_t’ from type ‘double *’
 error: Setup script exited with error: command 'gcc' failed with exit status 1
在网上找不到答案后,我开始调查产生错误的文件:transformation.c、transformation.pyx和transformation.pyd。我也读了一些关于赛昂的书

首先,所有错误都属于同一类:

error: incompatible types when assigning to type ‘__pyx_t_4kivy_8graphics_14transformation_matrix_t’ from type ‘double *’
这里出现了第一个错误:

__pyx_t_3 = __pyx_v_self->mat;
\uuuPyx\uT\u3的类型为:

__pyx_t_4kivy_8graphics_14transformation_matrix_t
struct __pyx_obj_4kivy_8graphics_14transformation_Matrix *
它有一个奇怪的名字,因为它是从transformation.pxd文件自动生成的:

ctypedef double matrix_t[16]
因此,type(\uupyx\ut\u3)==type(matrix\ut)==double*

\uuuPyx\uV\uSelf的类型为:

__pyx_t_4kivy_8graphics_14transformation_matrix_t
struct __pyx_obj_4kivy_8graphics_14transformation_Matrix *
同样,它是从转换生成的。pxd

ctypedef double matrix_t[16]

cdef class Matrix:
    cdef matrix_t mat
    ...
因此,type(\u pyx\u v\u self->mat)==type(Matrix.mat)==type(Matrix\u t)==double*

正如我们所看到的,任务双方:

__pyx_t_3 = __pyx_v_self->mat;
属于(双*)类型

为什么会出现这种错误:

error: incompatible types when assigning to type ‘__pyx_t_4kivy_8graphics_14transformation_matrix_t’ from type ‘double *’
那是被抚养长大的吗


编译器似乎没有将矩阵的类型识别为双*

类型,只是遇到了相同的错误。使用Cython 0.17.1可以帮助我:

sudo pip install Cython==0.17.1
若你们不想仅仅解决问题,你们可以深入检查这两个版本之间发生了什么变化。
-在这里你可以找到相关的问题,但不幸的是,我不是C/Cython的大师,快速浏览master和0.17.1之间的差异并没有告诉我问题在哪里,但如果你希望自己调查问题的话。

我也有同样的错误。我追溯到一个小例子,并向Cython邮件列表发送了一封电子邮件:

哦,天哪,我真不敢相信它能奏效!我最初使用的是Cython的一个旧版本,然后我将其升级到最新版本:0.17.2,我从未想到我会使用一个旧版本来实现它。非常感谢你!我收到了这个错误:
#错误不要使用这个文件,这是Cython编译失败的结果
错误:命令“x86_64-linux-gnu-gcc”失败,退出状态为1
,这修复了它。谢谢+1.