Pygame找不到包含文件“sdl.h”

时间:2009-05-08 20:31:04

标签: python sdl pygame

我正在尝试在Windows上构建一个使用Pygame的下载Python应用程序。我安装了Python 2.5和Pygame 1.7.1。我是Python的新手,但我只是尝试在Windows控制台命令行上键入顶级.py文件的名称。 (我正在使用Win XP专业版。)

这是我收到的消息。

C:\ Python25 \ include \ pygame \ pygame.h(68):致命错误C1083:无法打开包含  file:'SDL.h':没有这样的文件或目录

我认为Pygame是在SDL之上构建的,并且不需要单独的SDL安装。不过,我安装了SDL 1.2.13并将SDL include文件夹添加到我的%INCLUDE%环境变量中。仍然没有运气。

我注意到 C:\ Python25 \ Lib \ site-packages \ pygame 包含多个SDL * .DLL文件,但python树中没有任何sdl.h头文件。当然,我可以将sdl标头复制到 C:\ Python25 \ include \ pygame 文件夹中,但这是一个令人反感的想法。

有人知道正确的设置方法吗?

修改 该申请是"The Penguin Machine" pygame app

2 个答案:

答案 0 :(得分:3)

我尝试编译并在我的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

似乎它试图编译一个名为 surfutils 的扩展,它需要SDL开发标题。

所以我使用我的分发包管理器安装了libsdl1.2-dev包,它运行得很好。您必须安装SDL开发标头才能为您的系统构建它。

所以你的问题确实是:如何在Windows上安装SDL开发标题,以及我如何让程序使用它们?

好吧,我可以回答第二个问题。您必须编辑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,
                  )],
     )

更改第9行。它说:

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

将此路径更改为SDL标头所在的位置,即:

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

给游戏开发者留言说你遇到了这个麻烦。它可以提供在您的平台上查找SDL标头的更好方法。

答案 1 :(得分:1)

当你编译某些内容时,编译器在几个目录中查找头文件,一些硬编码并内置,并且通常一些作为编译器的参数给出(例如“gcc -I / usr / local / include ...”) )。一个猜测是你错过了这个。如果没有,请查看your error message的其他可能原因。

您需要安装SDL开发库,但由于您说“我可以复制sdl标头”,这听起来就像您已经拥有的那样。那么你的问题只是让编译器查看包含这些文件的include目录。