cmd gcc 编译java_学习在dos下使用gcc来编译

这两年里,断断续续的学习和使用c,平时都是在CodeBlocks里写代码,编译程序,点一下按钮就行了。对整个编译过程是一点儿都不了解。相比当年学习java,真的是选择了两个不同的路,当年学习java的时候,全是在dos下学习,javac, java,javaw之类的命令用的那些相当的熟,几年后才开始使用eclipse写代码。

今天在找如何用CodeBlocks编译生成的exe文件添加版本信息时,发现一篇文章,里面介绍到在dos下使用gcc,我就按照上面的提示操作了一下,过程中没有遇到什么问题。

只是感觉gcc命令用到的参数那是相当的多啊。

1.Console命令行版本:文件名:main.c

代码:

程序代码:

#include 

int main()

{

printf("hello world\n");

return 0;

}

在命令行下面输入:

gcc -Wall -c -g -o main.o main.c 进行文件编译。

参数解释:

-Wall 打开所有的编译警告

-c 只时行编译,不进行链结。

-g 产生调试信息。

-o main.o 生成编译输出文件叫main.o

最后进行文件链结:

ld -Lc:\mingw\lib -o main.exe main.o c:\mingw\lib\crt2.o -lmingw32 -lkernel32 -lmsvcrt

参数解释:

-Lc:\mingw\lib 设置链结时库文件路径,不设置的话,-lmingw32这些参数会找不到的。

-o main.exe 设置输出最终的可执行文件main.exe。

c:\mingw\lib\crt2.o 这个是Windows系统的控制台程序初始化模块。

-lmingw32 -lkernel32 -lmsvcrt 这三个是指示链结时链上libmingw32.a libkernel32.a libmsvcrt.a相关库。其中后两个对应的是kernel32.dll和msvcrt.dll,基本的程序代码printf函数实际上调用的是puts函数,在msvcrt.dll动态库中。

当正式编译的时候,可以使用以下命令行以生成最小的EXE:

gcc -s -O2 main.c -mconsole

参数解释:

-s 编译生成汇编代码

-O2 进行目标代码优化,O1到O3范围

-mconsole 指定生成控制台程序。

虽然这里正式编译的示例没有上面步子那么多,但你依然需要如示例所示,明白一个程序倒底和哪些库/模块进行了链结。然后我们使用depends.exe查看程序与运行库依赖,如下图所示:

2.Windows版本:文件名:main.c

代码:

程序代码:

#include 

typedef HINSTANCE _h;

int WINAPI WinMain(_h hinst, _h hprev, LPSTR cmd, int nShow)

{

return MessageBox(NULL, "hello world!", "OK", MB_OK);

}

命令行输入:

gcc -c main.c

ld -L"C:\Program Files\CodeBlocks\MinGW\lib" main.o "C:\Program Files\CodeBlocks\MinGW\lib\crt2.o" -lmingw32 -lkernel32 -luser32 -lmsvcrt

这里示例的是如果是带空格的路径。

当正式编译的时候,可以使用以下命令行以生成最小的EXE:注意-mwindows表示的是生成windows应用程序

gcc -s -O2 main.c -mwindows

用depends.exe查看程序与运行库依赖。用spy++查看窗口消息和信息。

2012-09-15

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值