c编译的一点小知识
来源:互联网 发布:js书籍推荐 编辑:程序博客网 时间:2024/05/01 22:55
使用gcc汇编器编译C语言程序时通常会经过4个处理阶段,即预处理阶段、编译阶段、汇编阶段和链接阶段。
在预处理阶段中,gcc会把C程序传递给C前处理器cpp,对C语言程序中指示符和宏进行替换处理,输出纯C语言代码;在编译阶段,gcc把C语言程序编译生成对应的与机器相关的as汇编语言代码;在汇编阶段,as汇编器会把汇编代码转换成机器指令,并以特定二进制格式输出保存在目标文件中;最后GNU ld链接器把程序的相关目标文件组合链接在一起,生成程序的可执行映像文件。调用gcc的命令行格式与编译汇编语言的格式类似:
gcc [ 选项 ] [ -o outfile ] infile ...
对于某次编译过程,并非一定要全部执行这4个阶段,使用命令行选项可以令gcc编译过程在某个处理阶段后就停止执行。例如,使用"-S"选项可以让gcc在输出了C程序对应的汇编语言程序之后就停止运行;使用"-c"选项可以让gcc只生成目标文件而不执行链接处理,如下所示。
gcc -o hello hello.c // 编译hello.c程序,生成执行文件hello。
gcc -S -o hello.s hello.c // 编译hello.c程序,生成对应汇编程序hello.s。
gcc -c -o hello.o hello.c // 编译hello.c程序,生成对应目标文件hello.o而不链接
-g 在编译时产生调试信息,供gdb使用。如
gcc -g -o hello hello.c
所以如果要用gdb进行调试,则必须在编译的时候用-g。
-Idir 在你是用#include"file"的时候,gcc/g++会先在当前目录查找你所制定的头文件,如 果没有找到,他回到缺省的头文件目录找,如果使用-I制定了目录,他回先在你所制定的目录查找,然后再按常规的顺序去找. 对于#include,gcc/g++会到-I制定的目录查找,查找不到,然后将到系统的缺 省的头文件目录查找 .
-llibrary 制定连接的时候使用的库 例子用法 gcc -lcurses hello.c 使用ncurses库连接程序
-Ldir 制定连接的时候,搜索库的路径。比如你自己的库,可以用它制定目录,不然 连接器将只在标准库的目录找。这个dir就是目录的名称。
-M 生成文件关联的信息。包含目标文件所依赖的所有源代码你可以用gcc -M hello.c 来测试一下,很简单。
- c编译的一点小知识
- DirectX的一点小知识
- ios的一点小知识
- 线程的一点小知识
- ffmpeg的一点小知识
- 数据库的一点小知识
- 关于C/C++内存一点小知识
- c/c++的一点知识
- C语言基础:C语言指针(4) - 补充一点关于指针的小知识
- UNICODE、DBCS的一点小知识
- Linux中scp的一点小知识
- UNICODE、DBCS的一点小知识
- 关于隧道的一点小知识
- UNICODE、DBCS的一点小知识
- 一点JavaBeans的入门小知识
- 关于excel开发的一点小知识
- ibatis中CDATA的一点小知识
- 表列有默认值的一点小知识
- Java &与&&的区别
- 安装AE
- 快速排序分析与C语言实现
- 2010年04月01日在这里开通个人空间和博客,祝贺一下!
- 太晚睡觉等于自杀
- c编译的一点小知识
- 善用Google Reader的Send To功能分享文章
- Java多线程编程要点 (一)
- No4 Java
- OPENCV+VS2008+SQLserver图片存储数据库开发
- 来搜网网址导航源码发布
- c# 修饰词public, protected, private,internal,protected的区别
- 0-1背包问题;动态规划;时间复杂度O(n方);给出最大价值与解得情况;内有动态规划思路总结;
- SQL 行列倒置(Oracle+SQL server)