unix cc编译过程
1.编译并链接一个完全包含与一个源文件的C程序:
cc program.c
这条命令产生一个称为a.out的可执行程序。中间会产生一个名为program.o的目标文件,但它在链接过程完成后会被删除。
2.编译并链接几个c源文件:
cc main.c sort.c lookup.c
当编译的源文件超过一个时,目标文件便不会被删除。这就允许你对程序进行修改后,只对那些进行过改动的源文件进行重新编译,如下一条命令所示。
3.编译一个c源文件,并把它和现存的目标文件链接在一起:
cc main.o lookup.o sort.c
4.编译单个c源文件,并产生一个目标文件(本例中为program.o),以后再进行链接:
cc -c program.c
5.编译几个c源文件,并为每个文件产生一个目标文件:
cc -c main.c sort.c lookup.c
6.链接几个目标文件;
cc main.o sort.o lookup.o
上面那些可以产生可执行程序的命令均可以加上“-o name”这个选项,它可以使连接器把可执行程序保存在“name”文件中,而不是“a.out”。在缺省情况下,链接器在标准c函数库中查找,如果在编译时加上“-lname”标志,链接器就会同时在“name”的函数库中进行查找。这个选项应该出现在命令行的做后。
(摘自《c和指针》)
———————————————————————————————————————————————————————————————————————————————
多数UNIX平台都通过CC调用它们的C编译程序.除标准和CC以外,LINUX和FREEBSD还支持gcc. 基本的编译命令有以下几种:
1. -c 编译产生对象文件(*.obj)而不链接成可执行文件,当编译几个独立的模块,而待以后由链接程序把它们链接在一起时,就可以使用这个选项,
如:
$cc -c hello.c ===> hello.o
$cc hello.o
2. -o 允许用户指定输出文件名,
如:
$cc hello.c -o hello.o
$cc hello.c -o hello
3. -g 指明编译程序在编译的输出中应产生调试信息.这个调试信息使源代码和变量名引用在调试程序中或者当程序异常退出后在分析core文件时可被使用.
4. -D 允许从编译程序命令行定义宏符号 一共有两种情况:一种是用-DMACRO,相当于在程序中使用#define MACRO,另一种是用-DMACRO=A,相当于程序中的#define MACRO A.如对下面这代码:
#ifdefine DEBUG
printf("debug message/n");
#endif 编译时可加上-DDEBUG参数,执行程序则打印出编译信息
5. -I 可指定查找include文件的其他位置.例如,如果有些include文件位于比较特殊的地方,比如/usr/local/include,就可以增加此选项
如下:
$cc -c -I/usr/local/include -I/opt/include hello.c此时目录搜索会按给出的次序进行.
6. -E 这个选项是相对标准的,它允许修改命令行以使编译程序把预先处理的C文件发到标准输出,而不实际编译代码.在查看C预处理伪指令和C宏时,这是很有用的.可能的编译输出可重新定向到一个文件,然后用编辑程序来分析: $cc -c -E hello.c >cpp.out 此命令使include文件和程序被预先处理并重定向到文件cpp.out.以后可以用编辑程序或者分页命令分析这个文件,并确定最终的C语言代码看起来如何.
7. -o 优化选项, 这个选项不是标准的 -O和 -O1指定1级优化 -O2 指定2级优化 -O3 指定3级优化 -O0指定不优化
$cc -c O3 -O0 hello.c 当出现多个优化时,以最后一个为准!!
8. -Wall 以最高级别使用GNU编译程序,专门用于显示警告用!!
$gcc -Wall hello.c
9. -L指定连接库的搜索目录,-l(小写L)指定连接库的名字 $gcc main.o -L/usr/lib -lqt -o hello 上面的命令把目标文件main.o与库qt相连接,连接时会到/usr/lib查找这个库文件.也就是说-L与-l一般要成对出现.
unix cc编译过程的更多相关文章
- unix gcc编译过程
gcc编译过程 现代编译器常见的编译过程: 源文件-->预处理-->编译/优化-->汇编-->链接-->可执行文件 对于gcc而言: 第一步 预处理 命令: ...
- 在Unix系统上,从源文件、目标文件、可执行文件的编译过程
是由“编译器驱动”(compiler driver)完成的: unix> gcc -o hello hello.c 在这里,gcc的编译器驱动程序读取源文件hello.c, #include & ...
- 李洪强漫谈iOS开发[C语言-004]-开发概述程序设计语言程序编译过程
汇编语言 指令用特定的名字来标记,这就是汇编语言 人比较容易看懂汇编语言 汇编直接和程序一一对应的 有汇编器把程序翻译成机器码 把高级语言编译成计算机识别的语言 程序编译过程 命令行 UNIX 系统中 ...
- Hadoop源码编译过程
一. 为什么要编译Hadoop源码 Hadoop是使用Java语言开发的,但是有一些需求和操作并不适合使用java,所以就引入了本地库(Native Libraries)的概念,通 ...
- 搭建OpenWrt开发环境(包括编译过程)
OpenWrt是一个高度模块化.高度自动化的嵌入式linux发行版,其编译和安装过程比普通的linux发行版而言,要简单太多了.如果您是新手,您那恐惧的心大可放到肚子里,呵呵.对于新手来说最麻烦的恐怕 ...
- C编译过程概述
转自:http://my.oschina.net/apeng/blog/105245 C 编译过程概述 目前Linux下最常用的C语言编译器是GCC(GNU Compiler Collection), ...
- Hadoop源码的编译过程详细解读(各版本)
说在前面的话 重新试多几次.编译过程中会出现下载某个包的时间太久,这是由于连接网站的过程中会出现假死,按ctrl+c,重新运行编译命令. 如果出现缺少了某个文件的情况,则要先清理maven(使用命 ...
- Spark源码的编译过程详细解读(各版本)
说在前面的话 重新试多几次.编译过程中会出现下载某个包的时间太久,这是由于连接网站的过程中会出现假死,按ctrl+c,重新运行编译命令. 如果出现缺少了某个文件的情况,则要先清理maven(使用命 ...
- [转贴]C编译过程概述
http://my.oschina.net/apeng/blog/105245 C 编译过程概述 目前Linux下最常用的C语言编译器是GCC(GNU Compiler Collection),它是G ...
随机推荐
- 线程池(4)Executors.newScheduledThreadPool-只执行1次
例子1:延迟3秒后,只执行1次 ScheduledExecutorService es = Executors.newScheduledThreadPool(5); log.info("开始 ...
- net Core 2.0应用程序发布到IIS
.net Core 2.0应用程序发布到IIS上注意事项 .net Core2.0应用程序发布window服务器报错容易错过的配置. 1.应用程序发布. 2.IIS上新建网站. 3.应用程序池选择 ...
- standby checking script 3则 V1 shell 脚本
---1 #!/bin/sh export ORACLE_SID=hdbexport ORACLE_BASE=/db/hdbdg/app/product/databaseexport ORACLE_H ...
- Java8中的新特性Optional
Optional 类是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象.Optional 是个容器:它可以保存类型T的值,或者仅仅保存 ...
- 《java学习三》jvm性能优化-------调优
常见参数配置 -XX:+PrintGC 每次触发GC的时候打印相关日志 -XX:+UseSerialGC 串行回收 -XX:+PrintGCDetails 更详细的GC日志 -X ...
- 【转】"超时时间已到。在操作完成之前超时时间已过或服务器未响应"的解决方法
方法有以下三种: 1.原因应该在数据访问有问题,可以把连接时间设置长些,在数据库连接字符串,加上Connect Timeout=18000,单位毫秒 2,在web.config中加上以下语句: < ...
- C#入门笔记3 表达式及运算符2
关系运算符,也称布尔比较运算符 注:var1为bool类型,var2与var3可以是其它类型.[数据类型看下一节] 运算符 类别 示例表达式 结果说明 == 二元 var1=var2==var3 如果 ...
- git-gui:使用终端打开以后出现错误提示 Spell checking is unavable
参考链接:http://www.lai18.com/content/10706682.html 安装了git-gui,打开以后出现以下提示: Spell checking is unavable: e ...
- CF713C Sonya and Problem Wihtout a Legend & hihocoder1942 单调序列
这两个题是一样的,不过数据范围不同. 思路1: 在CF713C中,首先考虑使生成序列单调不下降的情况如何求解.因为单调上升的情况可以通过预处理将a[i]减去i转化成单调不下降的情况. 首先,生成的序列 ...
- ios 11 12以后下拉刷新不回位的解决方法
原因: iOS11弃用了automaticallyAdjustsScrollViewInsets属性,新增contentInsetAdjustmentBehavior来替代它 //解决方案 添加如下 ...