1、下载了一个SDL-1.2.14.tar.gz
2、下载一个cygwin64对SDL-1.2.14.tar.gz解压
tar -zxvf SDL-1.2.14.tar.gz
在网上找的大概是需要需要这三个步骤
(1)./configure
(2)make
(3)make install
第一步的时候,就遇到了问题,报出了
*** Your compiler (gcc) does not produce Win32 executables!
在网上找了半天,原因大概是gcc版本的事,我看了我的gcc 4.9.2,把它改为gcc3.x
网上给出来的方法是
$ chmod 755 /usr/bin/set-gcc-default-3.sh
$ /usr/bin/set-gcc-default-3.sh
我在/usr/bin/里也没有找到set-gcc-default-3.sh,只能想别的办法了
看到网上有人说mingw与cygwin差不多,也就从网上下载了一个MinGW-5.1.6.exe,将cygwin中gcc换成MingGw最后还是没有编译成功
最后实在是没有办法了就从网上下载一个离线版的cygwin中gcc3.4.4,cygwin离线版的安装很容易,安装的也快的多。
安装好cygwin之后,重新编译SDL1.2,这次很顺利,在第二步的时候遇到一个很小的插曲,
/SDL_gamma.o build/.libs/SDL_pixels.o build/.libs/SDL_stretch.o build/.libs/SDL_
o build/.libs/SDL_yuv_sw.o build/.libs/SDL_joystick.o build/.libs/SDL_nullevents
udio.o build/.libs/SDL_dummyaudio.o build/.libs/SDL_sysevents.o build/.libs/SDL_
ents.o build/.libs/SDL_dibvideo.o build/.libs/SDL_dibaudio.o build/.libs/SDL_mmj
syssem.o build/.libs/SDL_systhread.o build/.libs/SDL_syscond.o build/.libs/SDL_s
m -mno-cygwin -o build/.libs/SDL.dll -Wl,--enable-auto-image-base -Xlinker --
/usr/bin/ld: cannot find dllcrt2.o: No such file or directory
/usr/bin/ld: cannot find -lmingw32
/usr/bin/ld: cannot find -lmoldname
/usr/bin/ld: cannot find -lmingwex
/usr/bin/ld: cannot find -lmsvcrt
/usr/bin/ld: cannot find -lmingw32
/usr/bin/ld: cannot find -lmingw32
/usr/bin/ld: cannot find -lmoldname
/usr/bin/ld: cannot find -lmingwex
/usr/bin/ld: cannot find -lmsvcrt
collect2: ld returned 1 exit status
很明显这个错误,是因为找不到下面的这些库文件,与dllcrt2.o文件,可能是由于编译的时候,没有找到相应的目录吧,
在SDL1.2中的Makefile中的27行
EXTRA_LDFLAGS = -mno-cygwin -luser32 -lgdi32 -lwinmm
后面加上 -L/lib/mingw,dllcrt2.o拷贝到Makefile同目录下,即可编译通过
好了现在编译通过,接下来就测试一下吧
#include<SDL.h>
#include<stdlib.h>
int main(){
SDL_Surface *screen;
Uint32 color;
int x;
if(SDL_Init(SDL_INIT_VIDEO)<0){
fprintf(stderr,"无法初始化:%s\n",SDL_GetError());
exit(1);
}
screen = SDL_SetVideoMode(640,480,16,SDL_SWSURFACE);/*640 X 480 X 16位色*/
if(screen == NULL){
fprintf(stderr,"无法设置640x480x16位色的视频模式:%s\n",SDL_GetError());
exit(1);
}
atexit(SDL_Quit);
color = SDL_MapRGB(screen->format,0,0,255);/*蓝色*/
SDL_FillRect(screen,&screen->clip_rect,color); /*整个屏幕填充颜色*/
SDL_UpdateRect(screen,0,0,0,0); /*更新整个屏幕*/
SDL_Delay(5000);/*延迟5秒钟*/
return 0;
}
这个是网上找了一个测试代码,编译一下
gcc test.c -o test -I/usr/local/include/SDL -L/usr/local/lib -lSDL -lpthread
运行一下./test,Ok,很成功,O(∩_∩)O
总结一下,cygwin上的问题确实挺多的,好点的可以使用虚拟机搭建一个ubuntu,ubuntu上一条命令即可完成,比cygwin简单多了,我的电脑配置不是很高,运行虚拟机比较慢,只好搭建一个cygwin, 不过感觉linux上,编译这些开源的东西,确实挺费劲的,好像是linux上编译很少能够有一次就很顺利编译通过的,各种各样版本匹配确实挺麻烦的。
下载cygwin:http://dl.cr173.com/soft1/cygwin2.738.zip
下载SDL1.2.14:http://download.csdn.net/detail/flcz163/8533541
网上引用到的连接:
http://blog.sina.com.cn/s/blog_557366df01011wna.html
http://blog.csdn.net/delphi308/article/details/6693968
http://blog.sina.com.cn/s/blog_489200e9010007i5.html