这几天编译QC的source碰到很多问题,因为RVCT2.2是windows版本,所以不得不在windows机器上进行编译,使用cygwind的过程碰到了一些问题,好记性不如烂笔头,总结一下方便以后查阅~~
Cygwin提供了在windows上一个模拟的Linux环境,安装好以后打开Cygwin.bat,发现其实Cygwin是在dos上运行了一个bash:
@echo off
c:
chdir c:/cygwin/bin
bash --login -i
把cgywin/bin加入PATH以后,直接在CMD中敲bash命令就能进入bash。Cygwin里面不能执行unix下的elf文件,只能执行windows下的.exe,而且gcc编译出的应用程序也都是windows下可执行程序。看看cygwin/bin下面的文件发现都是使用*.exe来提供和linux相同的命令,Cygwin的bash能自动完成到类似ls到ls.exe之类的转换。因此使用Cygwin时候看到的bash界面实际上并不需要使用,只需要使用Cygwin提供的bin库就好了,把这个bin库加入PATH路径以后,DOS下就有了linux下的这些命令,实际上这时候DOS也可以看作一个bash了~~
为Cygwin究竟是一个啥环境还纠结了很久。。。虽然说是仿的,但是Cygwin环境实际上还是一个货真价实的unix环境,虽然可能支持得没有一般的unix的库全,但是它的确是一个unix环境,它提供的命令能达到标准unix一样的效果,只不过这些命令是跑在windows上的~~因此如果有BUILD_UNIX=yes这样的选项,在Cygwin下面是不能去掉的。。。。
这里说一下Cygwin中gcc编译的-mno-cygwin这个选项。这个选项的作用就是让生成的.exe不需要依赖cygwin1.dll这个第三方库,所有的库都使用OS提供的库。因为默认使用gcc在cygwin下编 译出的可执行程序都是依赖cygwin1.dll的。要想生成的应用程序不依赖cygwin1.dll,在编译的时候指定这个选项就可以了。但是指定这个 选项以后cygwin默认不再使用它提供的标准库,而使用mingw提供的标准库进行编译,如果你的Cygwin没有正确安装mingw的库的话,就会报 找不到头文件的错误。详细的文档可以参考这里:http://www.delorie.com/howto/cygwin/mno-cygwin-howto.html
不过虽说Cygwin都提供了unix下常用的功能,但有时候有些命令就会出毛病,我编译的时候就碰到YACC老是崩溃的问题,解决的方法很简单,就是把相应的makefile拷到标准linux下编译,生成好相应的文件后再把文件拷到Cygwin下编译。其他命令的问题我觉得也可以通过这样的方法解决。
最后说一个小技巧,那就是将Cygwin的bin加入到PATH以后,我们可以在CMD中使用bash [parameter]来进入Cygwin执行相应的命令,比如说我要在CMD中目录下执行***.cmd,那么我们首先进入这个目录,然后敲bash ./***.cmd就可以在Cygwin中执行这个cmd了~~


577

被折叠的 条评论
为什么被折叠?



