关于在mingw+msys环境下,编译SDL所出现的问题!Createprocess 和 ranlib 的相关错误
2008-03-25 13:09
还是先贴的图出来,看看我遇到的错误:
Mingw下编译安装 SDL的问题_第1张图片
请看这句话process_begin:CreateProcess(NULL,/bin/install -c -m 755 sdl-config d:/mingw/bin/sdl-config,...) failed.
make (e=3):系统找不到指定的路径(乱码内容)
刚开始,发现这个问题的时候,我怀疑是我的环境的问题,在网上也有人说是环境的问题,但是经过多次的确认和测试,证明了我的环境好像没有问题(根据我个人的判断),但究竟是什么问题?
在我没有找到我环境的问题的时候,我找到了另一种解决问题的方法。不过不够灵活,但至少可以进行下去。
★:我的环境是根据网上众多高手的贴子制作成功的,而且也经过安装过别的开发包,是没有问题的。
现在,我们分析一下,错误出现的原因。
首先,要知道CreateProcess是干什么的?
     顾名思义,他是用来建立一个新的process得。他应该是windows得一个API函数,但是要在msys得仿linux命令行里对他进行调用,但是 这里给CreateProcess传递的参数则是这样的:“/bin/install -c -m 755 sdl-config d:/mingw/bin/sdl-config”,很显然,这个参数中"/bin/install"的这个命令用的路径方法测试linux得方法。但是 windows得API函数能够认识他的这样的路径方法吗?很显然,不行!!!那就要想办法解决这个问题了。
接着,就是寻找/bin/install -c -m 755 sdl-config d:/mingw/bin/sdl-config,这个东西,是如何传递过去的?
      免不了,要看看SDL的makefile文件了,
     ★:我是在SDL 官方网下载的源代码,版本是1.2.13
     ①,刚开始我执行的配置命令是这样的:
          configure --prefix=/mingw
     ②,编译命令:make
     ③,安装命令:make install
      就是在执行安装的时候出现了错误。
    问题就出现在Makefile里,如下:

SHELL    = D:/msys/bin/sh
CC      = gcc
INCLUDE = -I./include
CFLAGS = -g -O2
EXTRA_CFLAGS = -I./include -D_GNU_SOURCE=1
LDFLAGS =
EXTRA_LDFLAGS = -lm -luser32 -lgdi32 -lwinmm
LIBTOOL = $(SHELL) $(top_builddir)/libtool
INSTALL = /bin/install -c #( Makefile的第29行)
NASM    = -f win32
AR    = ar
RANLIB    = ranlib
WINDRES    = windres

这个 INSTALL 文件以后的好多地方都使用到了(凡是有安装文件的地方),它的直就是传递给CreateProcess这个windows的API函数。故此,出现了问题。
最后,问题的解决方法,
       可能还有其他的更好的解决方法,但是我现在仅仅找到了,这一种如果那位大侠有别的解决方法,欢迎指教.
INSTALL = /bin/install -c 改为 INSTALL = D:/msys/1.0/bin/install -c
★:具体install命令的路径就要看你安装的环境而定了。

好了,就是这样的,如此一来你就可以顺利安装了。
不过,我解决这个问题以后,有出来了一个新的问题,我将在下篇文章中说明。
★★★:最后,有另外的解决方法,我也尝试是可以的。
如下描述:
在安装mingw32得时候会有一个mingw32-make.exe文件,但默认是不安装的。
但在安装msys得时候也有一个相同功能的make.exe文件。
如果用mingw32-make.exe就会发生上边所述的错误,但是用msys得make得时候就不会出现上边的情况。
★★:欢迎转载,引用请标注出处,谢谢!