Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1327143
  • 博文数量: 436
  • 博客积分: 7854
  • 博客等级: 少将
  • 技术积分: 3225
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-18 16:30
文章分类

全部博文(436)

文章存档

2013年(2)

2012年(56)

2011年(70)

2010年(308)

分类:

2010-04-17 19:34:22

首先,别指望MinGW+GCC有一个安装程序,所谓的MinGW-5.1.4.exe这个自动下载安装的程序安装的是gcc3.5的程序包,我们这里安装gcc4.4!到下会看到一堆GNU的项目包,你知道下载哪个吗?
折腾了半个晚上,以为下载完成gcc那个包就OK了,结果gcc3.5能正常编译的测试程序到了gcc4居然出现
gcc: CreateProcess: No such file or Directory 错误
郁闷+气愤,不知道到底怎么了,要是说MinGW里面也有一个包阿,找了好久好久,看了一篇blog感觉自己似乎少装了点东西,也就是说windows下的gcc必须和MinGW相互依存,所以MinGW你得给装齐了。
首先:为了省去下载好多的什么gcc、g++、gcj、等的包(下载这些很麻烦,不仅要下bin而且要下dll、dev等包),所以直接来个痛快的,下 即可,包很大,60多M吧

还没完呢!(wow的某boss如是说),接下来得下载、mingw-runtime(分为两个:、dev)、如果你还想用gcc/g++编译Windows的程序那么一定得装w32api着个包,全名叫MinGW API for MS-Windows建议还是装上吧,这样的话就可以把gcc当vc6用了,如果你是程序员,调试程序肯定少不了,如果你机器装有Netbeans,那么gdb也肯定要装的,因为Netbeans调试C/Cpp就是用得所以要装的,这里,我还建议大家装一个东西,因为它对于编译java文件到exe具有重要意义,那就是libiconv,一个脱离系统的字符转换程序,一共有四个包(、、、dev、)doc和man不装就不装,也就是一些说明和帮助文档,这里还有一个,估计可以不装吧,似乎有一些dos2unix之类的辅助程序,但是为了保险,还是装上,最后,还应该有一个make程序吧,这东西是针对写好了makfile文件的一个自动编译调度程序,如果你装有MSYS那就可以不安装了,如果没有的话,那么,安一个吧

都下载完后,全部解压缩,统一解压缩到一个你顺眼的空文件夹下,目录格式是 bin、lib 、include....如果问你已经存在bin等目录的话,选择覆盖,其中,有个别的文件也有重复,没关系,你可以观察,他们是同一个文件,因为建立时间和字节数都是分毫不差的。最后把bin\mingw-make.exe的那个文件改名为make.exe或者拷贝改名亦可!

如果你觉得我写的还不够详细,可以参看http://www.cppblog.com/romangol/archive/2008/04/19/47595.html这个文章,写的大同小异,但是他下的是TDM的包,是第三方编译的,并且他提供的包有点旧了,并且它对gcc: CreateProcess: No such file or Directory 错误的解释我并不认同,大家仁者见仁、智者见智了,这都没什么关系,当然,开始我也是参考了他的文章,有兴趣的可以互相学习一下,网络给我们了共享资源和互相学习的机会。

//转载请注明出处,作者对该文章享有著作权

然后就是建立Path环境变量了,这个就不用我教了吧,我习惯配一个MinGW4_HOME,因为我的机器里有两套gcc,一个gcc3,一个gcc4,如果你也有gcc3,那么如何选择呢?我是这样的,分别配MinGW3_HOME和MinGW4_HOME的路径到你的安装路径下即可,不要到bin下面;但是不要在path下添加路径,这里我提供一个批处理,写好后添加到你的windows或者system32下,以便系统能直接找到它:

注:如果有人还想装的话,那么就不用我写什么攻略了!直接下载该,下载安装即可!
MSYS的下载,我就不提供了,如果有人有需要可以到下面自己找

/***************************mingw.cmd/bat************************/

@echo off

SET /p mingw=请选择编译器版本 [1]GCC Version 3.4.5 或 [2]GCC Version 4.4.0([1]或者[2]):

    if "%mingw%"=="1" goto write1
    if "%mingw%"=="2" goto write2

:error

@echo 错误的参数!退出...
    goto end

:write1
SET mingw=%MinGW3_HOME%
set path=%path%;%mingw%\bin
path
@echo 设置完成
goto end

:write2

SET mingw=%MinGW4_HOME%
set path=%path%;%mingw%\bin
path
@echo 设置完成
goto end

:end

好了,以后你要用的话,运行->cmd 回车 然后直接敲mingw即可,然后选择一下你要用的环境,当然这个环境是一次性的,你关闭了这个cmd终端(unix下叫terminal)就没了

然后,如果你真的配的没问题的话,尝试编译如下程序,如果不出现error就ok了,如果出现warning,那是这几个程序不太符合编程规范的原因,为了测试嘛,其实我也不怎么会c/cpp了,凑合一下吧!

//第一个:世界你好!hello world!hello.c

int main()
{
printf("hello ubuntu!\n");
return 0;
}

//编译运行一下
>gcc hello.c -o hello

//第二个,还是 世界你好 aa.cpp

#include

int main()
{
std::cout << "Goodbye cruel adventure world!" << std::endl;
}


//编译运行一下
>g++ aa.cpp -o aa

//第三个,还是 世界你好 Test.java 不过这个程序能编译通过,不能正常运行,不知道为什么,看提示是需要什么shared-lib 这里不要和用javac编译的程序混为一谈,gcj编译的java程序是不需要虚拟机运行的!它已经被彻底本地化了!就是编译出来的程序太大了,一个hello world的脑残程序能编译出2M大小

public class Test{
public static void main(String[] args){
      System.out.println("Hello World!");
}
}

>gcj Test.java --main=Test -o test

//如果能成功编译出test.exe就ok了,运行的时候会有一些问题提示的

//哎,现在还能写出这种程序来,真是很讽刺~~,哪天有空把这么脑残的地程序都换了!

如果所有测试通过,那么你就可以安逸的去睡了~~ 当然,如果安装完毕后还想进一步了解GCC4到底较之GCC3有多大变化,亦可以看看changelog和这个文章http://www.ibm.com/developerworks/cn/linux/l-gcc4/

实验1:将Lucene-2.41-core.jar 编译为Windows的dll动态链接库
首先,你得到上下载lucene,然后载入mingw3.45/mingw4.4
>gcj lucene-core-2.4.1.jar -o lucene.dll -shared -Wl,--add-stdcall-alias
就可以编译出一个lucene.dll 你可以用dll查看器查看导出的函数
说明一下 -shared代表我要编译的是一个动态连接库,光有这一个参数编译出来的windows并不认识,它不是有效的PE格式,必须加入-Wl,--add-stdcall-alias,-Wl参数的意思是当gcj调用ld连接器的时候将Wl后边的参数传给连接器,这里就是把--add-stdcall-alias传递给ld.exe连接器,stdcall其实是函数参数的传递方式和如何清理堆栈的一种调用格式。
阅读(3019) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~