GCC参数使用
gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步
1.预处理,生成.i的文件[预处理器cpp]
2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs]
3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as]
4.连接目标代码,生成可执行程序[链接器ld]
按照上述步骤,GCC的命令为
(1) 预处理. -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面.
例如 gcc -E test.c 则会将预处理完的文件输出在屏幕上,可以重定向到文件中,
gcc -E test.c test.i 在GCC命令中 -o 制定目标文件,
所以上面也可以这么写 gcc -E test.c -o test.i
(2) 编译. -S 只激活预处理和编译,就是指把文件编译(.i)成为汇编代码(.s)
gcc -S test.i
不需要自定义输出文件,上面的命令自动输出为test.s
(3) 汇编. -c 将汇编文件(.s) 编译输出(.o)文件
gcc -c test.s
上面命令会生成新文件test.o
其实,可以-c可以从源文件直接到.o文件
gcc -c test.c
(4) 链接。链接得到最终的可执行文件
gcc test.o (得到默认的a.out)
gcc test.o -o test
当然也可以一步就得到
gcc test.c -o test (顺序可变化,例如gcc -o test test.c)
其他的参数命令
-O 用法:#gcc -O1 test.c -o test
作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长
-include file
包含某个代码,简单来说,就是便以某个文件,需要另一个文件的时候,就可以用它设
定,功能就相当于在代码中使用#include<filename>
例子用法:
gcc hello.c -include /root/pianopan.h
-C
在预处理的时候,不删除注释信息,一般和-E使用,有时候分析程序,用这个很方便的
多文件
文件1 factorial.c
int factorial (int n)
{
if (n <= 1)
return 1;
else
return factorial (n - 1) * n;
}
文件2 main.c
#include <stdio.h>
#include <unistd.h>
int factorial (int n);
int main (int argc, char **argv)
{
int n;
if (argc < 2)
{
printf ("Usage: %s n\n", argv [0]);
return -1;
}
else
{
n = atoi (argv[1]);
printf ("Factorial of %d is %d.\n", n, factorial (n));
}
return 0;
}
利用如下的命令可编译生成可执行文件,并执行程序:
$ gcc -o factorial main.c factorial.c
$ ./factorial 5
Factorial of 5 is 120.
参考文章
http://www.cppblog.com/SEMAN/archive/2005/11/30/1440.html
http://wenku.baidu.com/link?url=gNMJetAMQ7woUWHXQ7vZ6kNIoO81lL20-3mRKDz_8yD0hI3351MMlgqetfEUCAnzgzJpUDsAxCIXoUlwcvujNAreI6q4dD0tD5sWtm-2ehG
最新文章
- [译]:Xamarin.Android平台功能——位置服务
- spring bean实例化方式
- hdu1081 To the Max
- HDU 3480 division
- 【转】Linux下(C/C++)使用system()函数一定要谨慎
- SGU 133.Border
- 【转】Linux下tar.xz结尾的文件的解压方法
- css布局详解(二)——标准流布局(Nomal flow)
- oracle 数据库 分割字符串返回结果集函数
- hrift 的序列化机制
- EntityFramework Core解决并发详解
- [array] leetcode - 40. Combination Sum II - Medium
- LeetCode算法题-Longest Uncommon Subsequence I(Java实现)
- 移动端滑动效果 swiper 4.0.7
- PAT甲级 1001 A+B Format
- python flask 如何修改默认端口号
- html class选择器与id选择器
- 20171104xlVBA制作联合成绩条
- Android 阴影,圆形的Button
- Linux less/more命令详解
热门文章
- Sublime Text Shortcuts
- Java伪代码示例
- 关于Python字符编码encode和decode
- 用OpenCV实现Photoshop算法(三): 曲线调整
- LVS持久化
- SpringBoot 密码MD5加密
- mysql 创建数据库 并设置utf8格式
- ReactiveX/RxJava文档中文版
- 学习mybatis时出现了java.io.IOException: Could not find resource EmployeeMapper.xml
- 《JavaScript高级程序设计》第6章补充 继承