我爲我的64位Windows 7系統設置簡單直接媒體層庫。基本庫在MinGW和Free Pascal都能正常工作,但目前我想包含SDL_gfx庫。我發現的在線教程說,我必須爲Windows系統構建我自己的DLL。 Link to the Tutorial. Chapter 4a is about GFXSDL_gfx 2.0.24 DLL是不是構建,使用MinGW
我按照步驟並相應地更改了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以及源代碼的部分內容,這些變量也缺少。
生成文件
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) [email protected] $^
$(RANLIB) [email protected]
$(SHARED_LIB): $(OBJS)
gcc -s -shared -o [email protected] $^ -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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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
非常感謝你,我終於得到了DLL。你能否解釋一下,這些變化是什麼意思,以及爲什麼要這樣做?我明白了,你將'gfxBlitFunc'添加到了幾行,但爲什麼他們需要? – Petroglyph 2013-04-08 22:00:25