Pregunta

Estoy tratando de construir un descargado de Python aplicación de Windows que utiliza Pygame.He instalado Python 2.5 y Pygame 1.7.1.Soy nuevo en Python, pero yo sólo traté de escribir el nombre del nivel superior .py archivo en una consola de Windows de línea de comandos.(Estoy usando Win XP Pro).

Este es el mensaje que me sale.

C:\Python25\include\pygame\pygame.h(68) :fatal error C1083:No se puede abrir incluyen archivo:'SDL.h':No existe el fichero o el directorio

Pensé que Pygame fue construido en la parte superior de la SDL y separada de SDL instalar no era necesario.Sin embargo, he instalado SDL 1.2.13 y se añade la SDL incluir carpeta a mi %INCLUDE% variable de entorno.Todavía no hay suerte.

Me di cuenta de que C:\Python25\Lib\site-packages\pygame incluye varios SDL*.Los archivos DLL, pero no hay sdl.h archivo de encabezado en cualquier lugar en el python árbol.Por supuesto, yo podría copiar la sdl encabezados en la C:\Python25\include\pygame carpeta, pero que es de un mal gusto la idea.

Alguien sabe la manera correcta de preparar las cosas?

EDITAR: La aplicación es "El Pingüino de la Máquina" pygame app.

¿Fue útil?

Solución

He intentado compilar y obtuvo los mismos errores en mi caja de linux:

$ python setup.py build
DBG> include = ['/usr/include', '/usr/include/python2.6', '/usr/include/SDL']
running build
running build_ext
building 'surfutils' extension
creating build
creating build/temp.linux-i686-2.6
creating build/temp.linux-i686-2.6/src
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include -I/usr/include/python2.6 -I/usr/include/SDL -I/usr/include/python2.6 -c src/surfutils.c -o build/temp.linux-i686-2.6/src/surfutils.o
In file included from src/surfutils.c:1:
/usr/include/python2.6/pygame/pygame.h:68:17: error: SDL.h: Arquivo ou diretório inexistente
In file included from src/surfutils.c:1:
/usr/include/python2.6/pygame/pygame.h:312: error: expected specifier-qualifier-list before ‘SDL_VideoInfo’
/usr/include/python2.6/pygame/pygame.h:350: error: expected specifier-qualifier-list before ‘SDL_Surface’
src/surfutils.c:5: error: expected ‘)’ before ‘*’ token
src/surfutils.c: In function ‘PyCollisionPoint’:
src/surfutils.c:74: error: ‘SDL_Surface’ undeclared (first use in this function)
src/surfutils.c:74: error: (Each undeclared identifier is reported only once
src/surfutils.c:74: error: for each function it appears in.)
src/surfutils.c:74: error: ‘surf1’ undeclared (first use in this function)
src/surfutils.c:74: error: ‘surf2’ undeclared (first use in this function)
src/surfutils.c:74: warning: left-hand operand of comma expression has no effect
src/surfutils.c:92: error: ‘PySurfaceObject’ has no member named ‘surf’
src/surfutils.c:97: error: ‘SDL_SRCALPHA’ undeclared (first use in this function)
src/surfutils.c:111: error: ‘PySurfaceObject’ has no member named ‘surf’
src/surfutils.c:161: warning: implicit declaration of function ‘collisionPoint’
error: command 'gcc' failed with exit status 1

Parece que intenta compilar una extensión llamada surfutils que las necesidades de SDL cabeceras de desarrollo.

Lo he instalado el libsdl1.2-dev paquete con mi paquete de distribución de gerente y trabajó muy bien.Debe instalar SDL cabeceras de desarrollo para construir para su sistema.

Así que tu pregunta realmente es: ¿Cómo puedo instalar SDL cabeceras de desarrollo en windows, y cómo puedo hacer que el programa de uso de ellos?

Bueno, que puedo responder a la segunda pregunta.Debe editar setup.py:

#!/usr/bin/env python2.3

from distutils.core       import setup, Extension
from distutils.sysconfig  import get_config_vars

includes = []
includes.extend(get_config_vars('INCLUDEDIR'))
includes.extend(get_config_vars('INCLUDEPY'))
includes.append('/usr/include/SDL')

print 'DBG> include =', includes

setup(name='surfutils',
      version='1.0',
      ext_modules=[Extension(
                    'surfutils', 
                    ['src/surfutils.c'], 
                    include_dirs=includes,
                  )],
     )

Cambie la línea 9.Dice:

includes.append('/usr/include/SDL')

Cambiar esta ruta de acceso a cualquier lugar de su SDL encabezados, es decir:

includes.append(r'C:\mydevelopmentheaders\SDL')

Deje una nota a los desarrolladores de juegos a decir que está teniendo este problema.Podría proporcionar una mejor manera de encontrar SDL encabezados en su plataforma.

Otros consejos

Cuando se compila algo que el compilador busca los archivos de encabezado en varios directorios, algunos codificado y construir, y normalmente unos dados como argumentos para el compilador (como por ejemplo "gcc -I/usr/local/include ...").Una conjetura es que le falta esto.Si no echa un vistazo a otras causas posibles para su mensaje de error.

Usted tendrá que tener la SDL El desarrollo de las Bibliotecas instaladas, pero ya que dicen "yo podría copiar la sdl encabezados" suena como que usted ya tiene.Entonces el problema es sólo para obtener el compilador para buscar en el directorio include contiene los archivos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top