首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法安装Kivy: Cython/GCC错误

无法安装Kivy: Cython/GCC错误
EN

Stack Overflow用户
提问于 2012-11-21 10:13:53
回答 2查看 9K关注 0票数 19

所以我试着按照官网的说明安装Kivy:

代码语言:javascript
复制
$ 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

这是我得到的:

代码语言:javascript
复制
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。我还读了一些关于Cython的文章。

首先,所有的错误都是相同类型的:

代码语言:javascript
复制
error: incompatible types when assigning to type ‘__pyx_t_4kivy_8graphics_14transformation_matrix_t’ from type ‘double *’

第一个错误出现在这里:

代码语言:javascript
复制
__pyx_t_3 = __pyx_v_self->mat;

__pyx_t_3的类型为:

代码语言:javascript
复制
__pyx_t_4kivy_8graphics_14transformation_matrix_t

它有这个奇怪的名字,因为它是从transformation.pxd文件自动生成的:

代码语言:javascript
复制
ctypedef double matrix_t[16]

因此,type(__pyx_t_3) == type(matrix_t) == double *。

__pyx_v_self的类型为:

代码语言:javascript
复制
struct __pyx_obj_4kivy_8graphics_14transformation_Matrix *

同样,它是从transformation.pxd生成的

代码语言:javascript
复制
ctypedef double matrix_t[16]

cdef class Matrix:
    cdef matrix_t mat
    ...

因此,双精度类型( type(__pyx_v_self->mat) == type,Matrix.mat)双精度类型( == type,matrix_t) == *

正如我们所看到的,任务的两个方面:

代码语言:javascript
复制
__pyx_t_3 = __pyx_v_self->mat;

是(双*)类型的。

为什么会出现这个错误:

代码语言:javascript
复制
error: incompatible types when assigning to type ‘__pyx_t_4kivy_8graphics_14transformation_matrix_t’ from type ‘double *’

然后就被养大了?

看起来编译器没有将matrix_t的类型识别为double *。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-21 14:35:02

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

代码语言:javascript
复制
sudo pip install Cython==0.17.1

如果你不仅仅想修复问题,你可以深入了解一下这两个版本之间有什么变化。https://github.com/cython/cython/blob/master/CHANGES.rst#0172-2012-11-20 -在这里你可以找到相关的问题,但不幸的是我不是C/Cython的专家,快速浏览一下master和0.17.1之间的差异并不能告诉我问题在哪里,但是如果你希望你可以自己调查这个问题。

票数 16
EN

Stack Overflow用户

发布于 2013-04-27 10:07:10

我也犯了同样的错误。我追踪到了一个小示例,并向Cython邮件列表发送了一封电子邮件:https://groups.google.com/forum/?fromgroups=#!topic/cython-users/fSZgHqrlCOc

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13485364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档