程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> cygwin編譯SDL1.2,cygwinsdl1.2

cygwin編譯SDL1.2,cygwinsdl1.2

編輯:關於C語言

cygwin編譯SDL1.2,cygwinsdl1.2


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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved