gcc编译的四个阶段:预处理,编译,汇编,链接
1:gcc编译的四个阶段:预处理,编译,汇编,链接
#vi file.c
#gcc -E file.c -o file.i//-E查看且预处理后停止编译,-o生成目标文件,-i表示已预处理
#gcc -S file.i -o file.s//-S编译到汇编而不进行汇编和链接
#gcc -c file.s -o file.o//-c编译到目标代码
#gcc file.o -o file//-o 文件输出到文件
# gcc -static file.c -o file//-static禁止使用动态库
;Makefile基本规则
1 all:test
2 echo “Hello World”
3 test:
4 @echo “Hi Hi”
;用Tab键空格
;all,test是目标
;2,4是生成目标的命令
#make(默认运行1),&make all ,&make test
;Makefile 依赖关系
1 simple:main.o foo.o bar.o
2 gcc -o simple main.o foo.o bar.o//执行命令
3 main.o:main.c
4 gcc -c main.c -o main.o//生成命令
5 foo.o:foo.c
6 gcc -c foo.c -o foo.o
7 bar.o:bar.c
8 gcc -c bar.c -o bar.o
9 clean:
10 rm *.o//清楚生成的文件
;simple依赖于:main.o foo.o bar.o
;三个.o文件又依赖于三个.c文件
#touch foo.c bar.c//不写main函数,多次定义报错
#vi main.c//写上main函数
#make clean//执行10
;假目标:.PHONY
1 .PHONY:clean
2 test:
3 echo "Hello"
4 clean:
5 rm *.c
;当目录中有其他clean时,可以使用假目标不与文件关联
;#vi test.c
#gcc -c test.c
# ls
test.c test.o(目标文件)
#gcc -o test(可执行文件) test.o
# ls
test test.c test.o
;一个主程序调用另一个子程序
# cat test.c test2.c
#include<stdio.h>
int main()
{printf("你好啊,我是有主啊\n");
test_2();
return 0;}
------------------------------------------
void test_2(void)
{printf("谢谢啦,你也好啊!\n");
return 0;}
# gcc -c test.c test2.c
test2.c test2.o test.c test.o
# gcc -o test test.o test2.o
test test2.c test2.o test.c test.o
gcc编译的四个阶段:预处理,编译,汇编,链接的更多相关文章
- C语言预处理 编译 汇编 链接四个阶段
c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接. 编译过程 编译过程又可以分成两个阶段:编译和会汇编. 编译 编译是读取源程序(字符流),对之进行词法和语法的分析,将高 ...
- C代码通过编译器编译成可执行文件, 需经历 预处理、编译、汇编、链接 四个阶段
内容借鉴 于yqzheng 一.预处理 1.任务: 进行宏定义展开.头文件展开.条件编译, 不检查语法 2.命令: gcc -E [源文件] -o [预处理文件] gcc -E hello.c -o ...
- gcc/g++ 实战之编译的四个过程
gcc和g++分别是GNU(一个开源组织)的c&c++编译器 对于.c后缀的文件,gcc把它当做是C程序,g++当做是C++程序:对于.cpp后缀的文件,gcc和g++都会当做c++程序. ...
- 1.预处理,生成预编译文件(.文件): Gcc –E hello.c –o hello.i 2.编译,生成汇编代码(.s文件): Gcc –S hello.i –o hello.s 3.汇编,生成目标文件(.o文件): Gcc –c hello.s –o hello.o 4.链接,生成可执行文件: linux笔记
1 动态查看日志 tail -f filename tail -1000f filename 2 解压当前目录内容为xxx.zip zip -r xxx.zip ./* 3 查看内存使用情况 fre ...
- C语言预处理编译链接各个阶段错误,分阶段的说一下
C语言预处理编译链接各个阶段错误,分阶段的说一下 C语言预处理编译链接各个阶段错误,分阶段的说一下比如指针异常,数组下标越界什么的 我来答 1个回答 #热议# 你觉得这辈子有希望看到996消失 ...
- 重温JavaScript预编译的四个步骤
JS是解释型语言,运行过程分三步: 一.语法分析(检查代码是否存在语法错误): 二.预编译(代码执行之前,在内存中开辟空间,存放变量与函数): 三.解释执行(执行JS代码): 理解预编译的过程,对于理 ...
- Less-css预处理编译
node编译 第一步:https://nodejs.org/en/ 到node官网下载最新的node 第二步:和普通软件一样把node安装好 第三步:运行-cmd,准备安装less 全局安装(整个电 ...
- Linux | GCC如何实现代码编译&&汇编&&链接过程
正文: 每次我们程序员所写的 代码 是给程序员看的呢?还是给电脑看的?其实我们所写的代码只是我们程序员之间交流的一样特殊语言,电脑是看不懂的.那么我们如何实现人机交流呢?这就不得不请出我们我们今天 ...
- windows下使用gcc完成头文件和目标文件编译
环境要求 安装了gcc win+r然后输入cmd , dos界面输入 gcc -v 查看有没有安装gcc 进入正题 新建 text.c文件键入如下代码: #include <stdio.h> ...
随机推荐
- 使用wex5得到的一些教训
博主一直都是做web开发,前段时间有个小想法,想给自己做个android小应用(很小,功能特别简单). 了解到可以用js直接做,貌似很简单,选用了wex5(基于codova插件)来直接开发. 最终发现 ...
- iframe用法总结
<iframe>是框架的一种形式,也比较常用到. 例子1. <iframe width=420 height=330 frameborder=0 scrolling=auto src ...
- ng-Enter指令
app.directive('ngEnter', function() { return function(scope, element, attrs) { element.bind("ke ...
- redis缓存技术学习
1 什么是redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串). list(链表).set(集合)和zset ...
- 使用CSS3各个属性实现小人的动画
使用CSS3各个属性实现带有音乐小人的动画,完全不使用JS代码: 注:chrome浏览器效果最佳,最终效果静态图: HTML代码如下: <!DOCTYPE html> <html&g ...
- C#中DateTime.Now.ToString()
项目开发中遇到一个问题:C#编写的SQL语句中有时间值,刚开始直接将DateTime.Now进行toString()处理,源代码调试程序运行正常. 然后我的电脑重装了系统,再次运行程序就报错“从字符串 ...
- Remove openjdk in Ubuntu/Configure jdk and running adb in 64-bit Ubuntu
sudo apt-get autoremove openjdk-7-jre sudo apt-get purge openjdk* java -version No openjdk available ...
- tar命令的使用
tar格式,会打包成一个文件,可以对多个目录,或者多个文件进行打包 tar命令只是打包,不会压缩,打包前后大小是一样的 tar命令 -c //打包 -x //解压 -f //指定文件 ...
- CodeSimth - .Net Framework Data Provider 可能没有安装
使用CodeSimth 连接SQLite数据库库 提示错误 codesmith 6以上的版本,说是支持sqlite生成,也有对应的sqliteprovider.dll,但是使用时却说Test fail ...
- ios安装app提示【未受信任的企业级开发者】。在设置中信任此开发者
最近在测试app,ios安装app后点击提示如下图: 解决方法: 1 点击 [设置] >[通用] >[设备管理] 2 点击企业级应用 > 信任该开发者 > 信任.设置之后 ...