Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't install Kivy: Cython/GCC error

so I tried to install Kivy following the instructions from the official site:

$ 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

This is what I get:

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

After failing to find an answer in the web I began to investigate the files which generated the error: transformation.c, transformation.pyx and transformation.pyd. I also read a little about Cython.

Firstly, all errors are of the same kind:

error: incompatible types when assigning to type ‘__pyx_t_4kivy_8graphics_14transformation_matrix_t’ from type ‘double *’

The first error is raised here:

__pyx_t_3 = __pyx_v_self->mat;

The type of __pyx_t_3 is:

__pyx_t_4kivy_8graphics_14transformation_matrix_t

It has this weird name because it was generated automatically from the transformation.pxd file:

ctypedef double matrix_t[16]

So, type(__pyx_t_3) == type(matrix_t) == double *.

The type of __pyx_v_self is:

struct __pyx_obj_4kivy_8graphics_14transformation_Matrix *

Again, it was generated from transformation.pxd:

ctypedef double matrix_t[16]

cdef class Matrix:
    cdef matrix_t mat
    ...

Therefore, type(__pyx_v_self->mat) == type(Matrix.mat) == type(matrix_t) == double *

As we can see, both sides of the assignment:

__pyx_t_3 = __pyx_v_self->mat;

are of (double *) type.

Why is this error:

error: incompatible types when assigning to type ‘__pyx_t_4kivy_8graphics_14transformation_matrix_t’ from type ‘double *’

being raised then?

It looks like the compiler is not recognizing the type of matrix_t as a double *.

like image 357
orangesky Avatar asked Nov 21 '12 02:11

orangesky


1 Answers

Just met the same error. Using of Cython 0.17.1 helps me:

sudo pip install Cython==0.17.1

If you want not just fix problem you can go in depth and check what was changed between this two versions. https://github.com/cython/cython/blob/master/CHANGES.rst#0172-2012-11-20 - here you can find related issues, but unfortunately I'm not a guru of C/Cython and quick glance to diff between master and 0.17.1 doesn't says me where is the problem, but if you wish you can investigate the problem by yourself.

like image 82
simplylizz Avatar answered Oct 18 '22 14:10

simplylizz