Frage

Ich versuche, eine heruntergeladene Python -App unter Windows zu erstellen, die Pygame verwendet. Ich habe Python 2.5 und Pygame 1.7.1 installiert. Ich bin neu in Python, aber ich habe gerade versucht, den Namen der oberen Ebene der Py -Datei in einer Windows -Konsolen -Befehlszeile zu tippen. (Ich verwende Win XP Pro.)

Dies ist die Nachricht, die ich bekomme.

C: python25 include pyGame pyGame.h (68): Fataler Fehler C1083: Die Datei integrieren kann nicht öffnen: 'sdl.h': Keine solche Datei oder Verzeichnis

Ich dachte, dass Pygame auf SDL aufgebaut wurde und dass eine separate SDL -Installation nicht erforderlich war. Trotzdem habe ich SDL 1.2.13 installiert und den SDL -Include -Ordner zu meinem % -Cleming -Umgebungsvariable hinzugefügt. Immer noch kein Glück.

ich habe bemerkt, dass C: Python25 lib Site-Packages PyGame Enthält mehrere SDL*.dll -Dateien, aber es gibt keine SDL.H -Header -Datei im Python -Baum. Natürlich konnte ich die SDL -Header in die kopieren C: python25 include pygame Ordner, aber das ist eine unangenehme Idee.

Kennt jemand den richtigen Weg, um Dinge einzurichten?

BEARBEITEN:Die Anwendung ist PyGame -App "The Penguin Machine".

War es hilfreich?

Lösung

Ich habe versucht zu kompilieren und bekam die gleichen Fehler in meiner Linux -Box:

$ 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

Es scheint, als würde es versuchen, eine Erweiterung namens zu kompilieren surfutils die SDL -Entwicklungsheader braucht.

Also habe ich das installiert libsdl1.2-dev Paket mit meinem Distribution Package Manager und es hat gut funktioniert. Sie müssen SDL -Entwicklungsheader installieren, um sie für Ihr System zu erstellen.

Ihre Frage lautet also wirklich: Wie installiere ich SDL -Entwicklungsheader unter Windows und wie ich das Programm nutze?

Nun, ich kann die zweite Frage beantworten. Sie müssen setup.py bearbeiten:

#!/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,
                  )],
     )

Änderung Zeile 9. Es heißt:

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

Ändern Sie diesen Weg dorthin, wo Ihre SDL -Header sind, dh:

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

Überlassen Sie dem Spieleentwickler eine Notiz, um zu sagen, dass Sie diese Probleme haben. Es könnte eine bessere Möglichkeit sein, SDL -Header auf Ihrer Plattform zu finden.

Andere Tipps

Wenn Sie etwas kompilieren, schaut der Compiler Header -Dateien in mehreren Verzeichnissen, einige festcodiert und erstellt und in der Regel einige als Argumente an den Compiler (wie zum Beispiel "GCC -i/usr/local/include ..."). Eine Vermutung ist, dass Ihnen das fehlt. Wenn nicht andere mögliche Ursachen ansehen Ihre Fehlermeldung.

Sie müssen das haben SDL Entwicklungsbibliotheken installiert, aber da Sie sagen "Ich könnte die SDL -Header kopieren", klingt es so, als hätten Sie es bereits. Dann besteht Ihr Problem nur darin, den Compiler dazu zu bringen, in das inklusive Verzeichnis zu suchen, das diese Dateien enthält.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top