c语⾔编译器mingw的使⽤说明,C语⾔编译器MINGW的使⽤说
明
在mingw环境中⽣成和使⽤dll都是⼗分⽅便的。
1.⽣成dll
gcc(g++) -shared -o test.dll test.c
⼀直⽤VS,看现在Eclipse很⽕,便想弄⼀下玩玩,⽤到了MINGW,继⽽⽤到了GCC,对GCC相当的不熟悉,从头开始学⼀些简单的吧。
简单的GCC⽤法~
gcc命令提供了⾮常多的命令选项,但并不是所有都要熟悉,初学时掌握⼏个常⽤的就可以了,到后⾯再慢慢学习其它选项,免得因选项太多⽽打击了学习的信⼼。
⼀. 常⽤编译命令选项
假设源程序⽂件名为test.c。
1. ⽆选项编译链接
⽤法:#gcc test.c
作⽤:将test.c预处理、汇编、编译并链接形成可执⾏⽂件。这⾥未指定输出⽂件,默认输出为a.out。编译成功后可以看到⽣成了⼀个
a.out的⽂件。在命令⾏输⼊./a.out 执⾏程序。./表⽰在当前⽬录,a.out为可执⾏程序⽂件名。
2. 选项 -o
⽤法:#gcc test.c -o test
作⽤:将test.c预处理、汇编、编译并链接形成可执⾏⽂件test。-o选项⽤来指定输出⽂件的⽂件名。输⼊./test执⾏程序。
c语言编译器怎么用?3. 选项 -E
⽤法:#gcc -E test.c -o test.i
or
作⽤:将test.c预处理输出test.i⽂件。
4. 选项 -S
⽤法:#gcc -S test.i
作⽤:将预处理输出⽂件test.i汇编成test.s⽂件。
5. 选项 -c
⽤法:#gcc -c test.s
作⽤:将汇编输出⽂件test.s编译输出test.o⽂件。
6. ⽆选项链接
⽤法:#gcc test.o -o test
作⽤:将编译输出⽂件test.o链接成最终可执⾏⽂件test。输⼊./test执⾏程序。
7. 选项-O
⽤法:#gcc -O1 test.c -o test
作⽤:使⽤编译优化级别1编译程序。级别为1~3,级别越⼤优化效果越好,但编译时间越长。输⼊./test执⾏程序。
⼆. 多源⽂件的编译⽅法
如果有多个源⽂件,基本上有两种编译⽅法:
[假设有两个源⽂件为test.c和testfun.c]
1. 多个⽂件⼀起编译
⽤法:#gcc testfun.c test.c -o test
作⽤:将testfun.c和test.c分别编译后链接成test可执⾏⽂件。
2. 分别编译各个源⽂件,之后对编译后输出的⽬标⽂件链接。
⽤法:
#gcc -c testfun.c //将testfun.c编译成testfun.o
#gcc -c test.c //将test.c编译成test.o
#gcc testfun.o test.o -o test //将testfun.o和test.o链接成test
以上两种⽅法相⽐较,第⼀中⽅法编译时需要所有⽂件重新编译,⽽第⼆种⽅法可以只重新编译修改的⽂件,未修改的⽂件不⽤重新编译。
1. gcc的家族成员
总的来说,gcc应该是⼀个编译器。可是,为什么我还要在这⾥介绍gcc的家族成员呢?其实,整套的gcc环境并不是由gcc构成的,他是由多个包所组成的。这些包的互相作⽤产⽣了gcc的开发环境。其中,有⼀些包是你开发应⽤程序所必备的基本包。离开这些包你将⽆法正常使⽤gcc。
gcc开发环境包括如下⼏⼤包:
binary 基本包 提供基本的汇编器,连接器等
gcc 基本包 各种语⾔的编译器,包括C,C++,Ada,Java等
Win32api,mingwi-runtime/glibc 基本包 系统函数库
make/automake 需要包 管理项⽬编译的程序
gdb 附加包 调试程序
2. gcc的常⽤编译参数
同VC,TC等编译器不同,gcc其实是可以很⽅便的在提⽰符下编译程序的。gcc在提⽰符下编译程序,并没有如同VC那样的冗长⽽晦涩的编译参数。相反,却有着⽐VC更灵活且简短的参数。
不得不承认,不懂gcc编译参数的⼈,确实会损失⼀些gcc的强⼤功能。所以,我下⾯简单介绍⼀下gcc的⼀些基本编译参数。这⾥,我以C 编译器为例。
注意:gcc的编译参数是区分⼤⼩写的。
编译⼆进制代码
gcc -c yours.c -o yours.o
使⽤这段指令,gcc将会把yours.c编译成yours.o的⼆进制代码。其中,yours.o就类似于VC,TC中的.obj⽂档。
编译最简单的⼩程序
gcc -o yours yours.c
通过这条指令,gcc将会把yours.c源代码编译成名为yours的可执⾏程序。当然,您也可以将yours.c改成我们刚才介绍的yours.o⽂件。这样,gcc将使⽤编译刚才编译好的⼆进制⽂档来链接程序。这⾥,格式的特点是,-o 后⾯是⼀串⽂件列表,第⼀个参数是所编译程序的⽂件名,从第⼆个开始,就是您编译和连接该可执⾏程序所需要的⼆进制⽂档或者源代码。
编译时将⾃⼰的头⽂件⽬录设为默认头⽂件⽬录
gcc -I”Your_Include_Files_Document_Path” -c yours.c -o yours.o
这条指令中的-I参数将会把Your_Include_Files_Document_Path添加到你默认的头⽂件⽬录中。这样您将可以使⽤ #include 来导⼊头⽂件。
编译时使⽤⾃⼰的静态库存放⽬录
gcc -L”Your_Lib_Files_Document_Path” -o yours yours.o
这条指令将会让gcc在连接时除了在默认Lib存放⽬录中搜索指定的静态库以外,还会在Your_Lib_Files_Document_Path中搜索。
编译时使⽤静态连接库
gcc -lyour_lib -o yours yours.o
这条指令将会让gcc在连接时把 libyour_lib.a中您所⽤到的函数连接到可执⾏程序中。此处注意,gcc所使⽤的静态连接库是lib*.a格式的。在连接时,只且仅需要提供*的内容就可以了。
编译时使⽤优化
gcc -O2 -c yours.c -o yours.o
使⽤优化⽅式编译程序,其中除了-O2以外,还有-O3 -O1等等。他们代表不同的优化等级。最常⽤的,是-O2优化。当然,还有针对特殊CPU的优化,这⾥就不介绍了。
编译时显⽰所有错误和警告信息
gcc -Wall -c yours.c -o yours.o
gcc在默认情况下,将对⼀些如变量申请未使⽤这样的问题或者申请了没有给予初始值的问题忽略。但是,如果使⽤了-Wall参数,编辑器将列出所有的警告信息。这样,您就可以知道您的代码中有多少可能会在其他操作系统下出错的地⽅了。(⽤这个指令看看你的代码有多少地⽅写的不怎么合适。)
编译连接时,加⼊调试代码
gcc -g -o yours yours.c
正如同VC有debug编译模式⼀样,gcc也有debug模式。添加了-g 参数编译的可执⾏程序⽐普通程序略为⼤⼀些,其中添加了⼀些调试代码。这些代码将被gdb所⽀持。
连接时缩⼩代码体积
gcc -s -o yours yours.o
因为有⼈说Visual-MinGW⽣成的代码⼩,于是研究了⼀下它的编译参数,发现release模式的编译参数就加了这⼀项。貌似编译后的代码的确缩⼩了很多。
反汇编
gcc -S yours.c
⽤这个指令能把C语⾔变成汇编语⾔,不过不是常见的Intel语法,⽽是AT&T语法。两者的语法有很⼤的区别。
获得帮助
gcc --help
这条指令从意思上就能看出,获得gcc的帮助信息。如果您有什么特殊需要,也许这个指令能帮上点⼩忙。
总结:
gcc的编译参数是可以组合起来的,如:
gcc yours.c -o yours -Wall -s -O2
预告:下⼀篇将介绍⽤gdb调试C程序
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论