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
GCC参数使用的更多相关文章
- GCC参数详解
GCC参数详解 [介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件 2.将预处理后的文件不转换成汇 ...
- 在mk/rte.app.mk 256行加echo $(O_TO_EXE_DO)查看GCC参数
在mk/rte.app.mk 256行加echo $(O_TO_EXE_DO)查看GCC参数,如:
- GCC参数详解 一
gcc是gnu compiler collection 的简称,他包含了多种语言的编译器,如C, C++, Objective-C, Objective-C++, Java, Fortran和Ada. ...
- gcc参数PIE和PIC的区别和共同点
gcc参数的PIE和PIC 区别 PIE:用在可执行文件 PIC:用在库文件 共同点 生成跟位置没有关系的symbol
- gcc参数-l传递顺序错误导致`undefined reference'的一点小结
刚才编译一个pthread的单文件程序, 使用的命令行是: gcc -o thread1 -lpthread thread1.c 结果报错: $ gcc -o thread1 -lpthread th ...
- [转]GCC参数详解
[介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件[预处理器cpp] 2.将预处理后的文件不转换成 ...
- GCC参数详解 二
1简介 2简单编译 2.1预处理 2.2编译为汇编代码(Compilation) 2.3汇编(Assembly) 2.4连接(Linking) 3多个程序文件的编译 4检错 5库文件连接 5.1编译成 ...
- C语言基础(21)-C语言编译过程及GCC参数简介
任何C语言的编译过程可分为以下三部分: 一.预编译 在C语言中,以#开头的语句又叫预编译指令.预编译主要做以下两件事情: 1.将#include包含的头文件做简单的文本替换: 2.将代码中的注释删除. ...
- GCC 参数详解
转载出处:http://blog.csdn.net/yff1030/article/details/8592077 原文:http://www.cppblog.com/SEMAN/archive/20 ...
随机推荐
- 94. Binary Tree Inorder Traversal(二叉树中序遍历)
Given a binary tree, return the inorder traversal of its nodes' values. For example:Given binary t ...
- cdoj1344卿学姐种美丽的花
地址:http://acm.uestc.edu.cn/#/problem/show/1344 题目: 卿学姐种美丽的花 Time Limit: 8000/4000MS (Java/Others) ...
- [MySQL] 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
前言: 关于多级别菜单栏或者权限系统中部门上下级的树形遍历,oracle中有connect by来实现,MySQL没有这样的便捷途径,所以MySQL遍历数据表是我们经常会遇到的头痛问题 ...
- 通过FFmpeg将多媒体文件解码后保存成Bmp图像(YUV420 RGB32)
/* g++ -o test test.cpp -lavformat -lavcodec -lavutil -lz -lm -lpthread -lswscale */ #include <st ...
- python中定制类
1.python中__str__和repr 如果要把一个类的实例变成 str,就需要实现特殊方法__str__(): class Person(object): def __init__(self, ...
- Zabbix JVM 安装
Zabbix 服务端安装插件 系统:centos 7.4 x64 环境:zabbix 3.0.16 yum源:rpm -ivh http://repo.zabbix.com/zabbix/3.0/rh ...
- CentOS 7如何将.deb文件转换.rpm
1.首先下载alien工具 http://ftp.de.debian.org/debian/pool/main/a/alien/ http://ftp.de.debian.org/debian/po ...
- 20145235李涛《网络对抗》Exp9 Web安全基础实践
基础问答 SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的. 对于SQL注入攻击的防范 ...
- log4j日志的配置--Debug
############################### 日志记录器定义 ################################ 日志输出级别 OFF.DEBUG.INFO.WARN. ...
- idea技巧
写在前面 以前一直用的elipce,如今入坑IntelliJ IDEA,没想到啊.深深的爱上了它,强大到无所不能: "工欲善其事必先利其器",IntelliJ IDEA作为一个非常 ...