预处理 编译 汇编 链接
来源:互联网 发布:linux重启mysql命令 编辑:程序博客网 时间:2024/05/21 10:52
从一个.c 或 .cpp 文件,到 .out 文件,要经过以下几个过程。
一、预处理
读取源文件,对特殊符号进行处理;比如
1、宏定义
2、条件编译指令
3、头文件
4、删除注释
简单来说就是一个字符替换的过程。
gcc 中利用-E选项只进行到预处理,得到预处理文件 hello.i
$ gcc -E hello.cpp -o hello.i
二、编译
编译阶段主要是对预处理得到的文件进行词法、语法、语义分析,得到相应的汇编代码。
gcc 中利用 -S 选项只进行到编译阶段,生成汇编文件,跳过汇编与链接阶段
$ gcc -S hello.i -o hello.s
三、汇编
汇编阶段就是把汇编代码转换成机器码,生成目标文件。目标文件虽然是机器码,但仍然不能执行,因为缺少相应的库
gcc 中利用 -c 选项只进行到汇编阶段,不进行链接,生成目标文件hello.o
$ gcc -c hello.s -o hello.o
四、链接
链接阶段,链接器把一堆目标文件以及它们所需要的库文件链接起来,生成可执行程序
gcc中可以通过 ld 命令来把目标文件与库文件链接起来
ld -static o1.o o2.o -l xx.lib
链接又分为两种,静态链接和动态链接
静态链接
静态链接就是链接时把静态库中所用到的代码直接链接到目标程序中,生成可执行程序;程序运行的时候就不再需要库文件。
动态链接
动态链接没有把库中所需要的所有代码链接到目标程序中,程序运行时需要动态库的支持。
linux 与 windows各种文件的后缀名
linux windows
目标文件 .o .obj
静态库 .a .lib
动态库 .so .dll
可执行 .out .exe
动态库文件、静态库文件制作示例:
http://wenku.baidu.com/view/7d8602b265ce050877321301.html
- 预处理、编译、汇编、链接
- 预处理编译汇编链接
- 预处理 编译 汇编 链接
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接 .
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- C++ 预处理、编译、汇编、链接
- C++ 预处理、编译、汇编、链接
- Google Suggest(Ajax+JSON+Servlet)
- eclipse无法智能提示解决办法
- 触发器-----------数据库(SQL)
- 在JSP中实现分页显示(假分页)
- servlet的妙用-权限控制
- 预处理 编译 汇编 链接
- struts2项目 tomcat报错:严重: Dispatcher initialization failed java.lang.RuntimeException
- Struts2中的No result defined for action错误
- Java编程算法基础--加密与解密
- C++多态与虚函数
- 我的人生感悟——林芬亮
- ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务 解决办法
- ORA-27101 Shared memory realm does not exist 解决办法
- 每一件小事都值得你去努力