4

Pygameを使用するダウンロードしたPythonアプリをWindowsでビルドしようとしています。Python2.5とPygame1.7.1をインストールしました。Pythonは初めてですが、Windowsコンソールのコマンドラインで最上位の.pyファイルの名前を入力してみました。(私はWin XP Proを使用しています。)

これが私が受け取るメッセージです。

C:\ Python25 \ include \ pygame \ pygame.h(68):致命的なエラーC1083:インクルードファイルを開くことができません:'SDL.h':そのようなファイルまたはディレクトリはありません

PygameはSDLの上に構築されており、SDLを別途インストールする必要はないと思いました。それでも、SDL 1.2.13をインストールし、SDLインクルードフォルダーを%INCLUDE%環境変数に追加しました。まだ運がない。

C:\ Python25 \ Lib \ site-packages\pygameにいくつかのSDL*.DLLファイルが含まれていることに気付きましたが、Pythonツリーのどこにもsdl.hヘッダーファイルがありません。もちろん、sdlヘッダーをC:\ Python25 \ include \ pygameフォルダーにコピーすることもできますが、それは不快な考えです。

誰かが物事を設定する正しい方法を知っていますか?

編集: アプリケーションは「ペンギンマシン」pygameアプリです

4

2 に答える 2

4

コンパイルを試みたところ、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

surfutilsSDL 開発ヘッダーを必要とする拡張機能をコンパイルしようとしているようです。

libsdl1.2-devそのため、ディストリビューション パッケージ マネージャーを使用してパッケージをインストールしたところ、問題なく動作しました。システム用にビルドするには、SDL 開発ヘッダーをインストールする必要があります。

あなたの質問は本当に次のとおりです: Windows に SDL 開発ヘッダーをインストールするにはどうすればよいですか? また、プログラムでそれらを使用するにはどうすればよいですか?

さて、私は2番目の質問に答えることができます。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 ヘッダーを見つけるためのより良い方法を提供できます。

于 2009-05-08T21:28:59.790 に答える