2

64ビットWindows7システム用にSimpleDirectMediaLayerLibraryをセットアップしています。基本ライブラリはMinGWとFreePascalの両方で正常に動作しますが、現在、SDL_gfxライブラリを含めたいと思います。私が見つけたオンラインチュートリアルでは、Windowsシステム用に独自のDLLを作成する必要があると述べています。チュートリアルへのリンク。第4a章はGFXについてです

手順に従い、それに応じてmakefileを変更しました。しかし、gfxフォルダーで「mingw32-make」を実行すると、「「GFX_ALPHA_ADJUST_ARRAY」への未定義の参照」というエラーメッセージが表示されて中止されます。その後、このメッセージが再び繰り返されますが、ソースコードの別の部分を指しています。次に、「ld.exe」は「セクション'.data'の不正な再配置アドレス0x0」というメッセージで中止されます。「ld」が終了ステータスとして1を返したため、「collect2.exe」も失敗します。次に、makefileは、「ターゲット'SDL_gfx.dll'のレシピが失敗しました」と文句を言います。

私はLinuxラップトップを所有しているので、そこですべてを試してコンパイルするのが役立つかもしれないと思いましたが、それがどれほど複雑かはわかりません。だから基本的に私は何をすべきかアドバイスを求めます。デバッグに関しては、SDLライブラリ全体を数回再インストールし、正しく機能するかどうかをテストしました。インストールした他のDLL(SDL_image.dll)も正常に動作します。

私はすでにプリコンパイルされたDLLをインターネットで探しましたが、それらは古くなっているか、32ビットシステム用です。しかし、他に何も機能しない場合は、これも解決策になる可能性があります。変数が欠落しているmakefileとソースコードの一部を投稿します。

Makefile

    CC = gcc
    AR=ar rc
    RANLIB=ranlib

    prefix=C:/
    bin_dir=$(prefix)/bin
    include_dir=$(prefix)/include
    lib_dir=$(prefix)/lib

    CFLAGS = -O3 -march=athlon-xp -mmmx -msse -m3dnow -DBUILD_DLL -IC:/MinGW/include/SDL
    LIBS = -LC:/MinGW/lib -lSDL

    OBJS = SDL_framerate.o SDL_gfxPrimitives.o SDL_imageFilter.o SDL_rotozoom.o

    STATIC_LIB=libSDL_gfx.a
    IMPORT_LIB=libSDL_gfx.dll.a
    SHARED_LIB=SDL_gfx.dll

    all: $(STATIC_LIB) $(SHARED_LIB)

    $(STATIC_LIB): $(OBJS)
    $(AR) $@ $^
    $(RANLIB) $@

    $(SHARED_LIB): $(OBJS)
gcc -s -shared -o $@ $^ -Wl,--enable-auto-import,--export-all -Wl,--out-implib=$(IMPORT_LIB) $(LIBS)

    test: $(SHARED_LIB) $(STATIC_LIB) Test/TestFramerate.exe Test/TestFonts.exe
    Test/TestGfxPrimitives.exe Test/TestImageFilter.exe Test/TestRotozoom.exe

    Test/TestFramerate.exe: Test/TestFramerate.c
gcc -c $^ -o Test/TestFramerate.o -O3 -march=athlon-xp -mmmx -msse -m3dnow -DWIN32 -Ic:/dev/local/include/SDL
gcc -o $@ Test/TestFramerate.o $(CFLAGS) -L../ -Lc:/dev/local/lib -lmingw32 -lSDLmain $(SHARED_LIB) -lSDL

    Test/TestFonts.exe: Test/TestFonts.c
gcc -c $^ -o Test/TestFonts.o -O3 -march=athlon-xp -mmmx -msse -m3dnow -DWIN32 -Ic:/dev/local/include/SDL
gcc -o $@ Test/TestFonts.o $(CFLAGS) -L../ -Lc:/dev/local/lib -lmingw32 -lSDLmain $(SHARED_LIB) -lSDL

    Test/TestGfxPrimitives.exe: Test/TestGfxPrimitives.c
gcc -c $^ -o Test/TestGfxPrimitives.o -O3 -march=athlon-xp -mmmx -msse -m3dnow -DWIN32 -Ic:/dev/local/include/SDL
gcc -o $@ Test/TestGfxPrimitives.o $(CFLAGS) -L../ -Lc:/dev/local/lib -lmingw32 -lSDLmain $(SHARED_LIB) -lSDL

    Test/TestImageFilter.exe: Test/TestImageFilter.c
gcc -c $^ -o Test/TestImageFilter.o -O3 -march=athlon-xp -mmmx -msse -m3dnow -DWIN32 -Ic:/dev/local/include/SDL
gcc -o $@ Test/TestImageFilter.o $(CFLAGS) -L../ -Lc:/dev/local/lib -lmingw32 -lSDLmain $(SHARED_LIB) -lSDL

    Test/TestRotozoom.exe: Test/TestRotozoom.c
gcc -c $^ -o Test/TestRotozoom.o -O3 -march=athlon-xp -mmmx -msse -m3dnow -DWIN32 -Ic:/dev/local/include/SDL
gcc -o $@ Test/TestRotozoom.o $(CFLAGS) -L../ -Lc:/dev/local/lib -lmingw32 -lSDLmain $(SHARED_LIB) -lSDL

    install: $(STATIC_LIB) $(SHARED_LIB)
cp $(STATIC_LIB) $(SHARED_LIB) $(IMPORT_LIB) $(lib_dir)
cp SDL_framerate.h SDL_gfxPrimitives.h SDL_imageFilter.h SDL_rotozoom.h $(include_dir)/SDL

    uninstall:
rm -f $(lib_dir)/$(STATIC_LIB)
rm -f $(lib_dir)/$(SHARED_LIB)
rm -f $(lib_dir)/$(IMPORT_LIB)
rm -f $(include_dir)/SDL/SDL_framerate.h
rm -f $(include_dir)/SDL/SDL_gfxPrimitives.h
rm -f $(include_dir)/SDL/SDL_imageFilter.h
rm -f $(include_dir)/SDL/SDL_rotozoom.h

    clean:
rm -f *.o *.a *.dll
rm -f Test/*.o Test/*.exe

'SDL_gfxPrimitives.c'のパーツ; 435-445行目と773-785行目

    /*435-445*/
    #ifdef ALPHA_PIXEL_ADDITIVE_BLEND
                    A = (dA | GFX_ALPHA_ADJUST_ARRAY[alpha & 255]) << Ashift; // make destination less transparent...
    #else
                    A = ((dA + ((((color & Amask) >> Ashift) - dA) * alpha >> 8)) << Ashift) & Amask;
    #endif
                    *pixel |= A;
                }
            }
        }
        break;
    #endif

    /*773-785*/
    #ifdef ALPHA_PIXEL_ADDITIVE_BLEND
                        A = (dA | GFX_ALPHA_ADJUST_ARRAY[sA & 255]) << Ashift; // make destination less transparent...
    #else
                        A = ((dA + ((sA - dA) * alpha >> 8)) << Ashift) & Amask;
    #endif
                        *pixel |= A;
                    }
                }
            }
        }
    }
    break;
    #endif
4

1 に答える 1

2

次の手順に従ってMakefileを変更する必要があります。

1.変更:

OBJS = SDL_framerate.o SDL_gfxPrimitives.o SDL_imageFilter.o SDL_rotozoom.o

To:

OBJS = SDL_framerate.o SDL_gfxBlitFunc.o SDL_gfxPrimitives.o SDL_imageFilter.o SDL_rotozoom.o

2.変更:

cp SDL_framerate.h SDL_gfxPrimitives.h SDL_imageFilter.h SDL_rotozoom.h $(include_dir)/SDL

に:

cp SDL_framerate.h SDL_gfxBlitFunc.h SDL_gfxPrimitives.h SDL_imageFilter.h SDL_rotozoom.h $(include_dir)/SDL

3.追加:rm -f $(include_dir)/SDL/SDL_gfxBlitFunc.h

rm -f $(include_dir)/SDL/SDL_framerate.h

rm -f $(include_dir)/SDL/SDL_gfxPrimitives.h
于 2013-04-05T09:55:40.720 に答える