SDL_gfx 2.0.24 DLL不是使用MinGW生成的

SDL_gfx 2.0.24 DLL不是使用MinGW生成的,dll,windows-7,64-bit,mingw,sdl,Dll,Windows 7,64 Bit,Mingw,Sdl,我正在为我的64位Windows 7系统设置简单直接媒体层库。基本库可以与MinGW和Free Pascal一起使用,但目前我想包括SDL_gfx库。我发现的在线教程说,我必须为Windows系统构建自己的DLL 我遵循这些步骤并相应地更改了makefile。但是,当我在gfx文件夹中运行“mingw32 make”时,它会中止,并显示错误消息“未定义对‘gfx_ALPHA_ADJUST_ARRAY’的引用”。之后,再次重复此消息,但指向源代码的另一部分。然后“ld.exe”中止,并显示消息“节

我正在为我的64位Windows 7系统设置简单直接媒体层库。基本库可以与MinGW和Free Pascal一起使用,但目前我想包括SDL_gfx库。我发现的在线教程说,我必须为Windows系统构建自己的DLL

我遵循这些步骤并相应地更改了makefile。但是,当我在gfx文件夹中运行“mingw32 make”时,它会中止,并显示错误消息“未定义对‘gfx_ALPHA_ADJUST_ARRAY’的引用”。之后,再次重复此消息,但指向源代码的另一部分。然后“ld.exe”中止,并显示消息“节'.data''中的错误重新登录地址0x0”。“collect2.exe”也失败,因为“ld”返回1作为结束状态。然后生成文件抱怨“目标'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_gfexperiments.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
/*435-445*/
#ifdef ALPHA_像素_加法_混合

A=(dA | GFX_ALPHA_ADJUST_ARRAY[ALPHA&255])>Ashift)-dA)*ALPHA>>8))您应该按照以下步骤修改Makefile:

一,。 更改:

二,。 更改:

致:

三,。 添加:
rm-f$(包括目录)/SDL/SDL\u gfxBlitFunc.h

中间

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


非常感谢,我终于得到了DLL。请你解释一下,这些改变意味着什么,为什么要这样做?我明白了,您在几行中添加了“gfxBlitFunc”,但为什么需要它们呢?
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
rm -f $(include_dir)/SDL/SDL_framerate.h
rm -f $(include_dir)/SDL/SDL_gfxPrimitives.h