unix cc编译过程

摘要:
在缺省情况下,链接器在标准c函数库中查找,如果在编译时加上“-lname”标志,链接器就会同时在“name”的函数库中进行查找。

    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编译过程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JMETER02centos7修改系统时间、时区下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python程序的执行过程

1. Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在。如果是解释型语言,那么生成的*.pyc文件是什么呢?c应该是compiled的缩写才对啊! 为了防止其他学习Python的人也被这句话误解,那么我们就在文中来澄清下这个问题...

菜鸟学STM32之串口通讯

微信公众号:小樊Study关注共同学习,问题或建议,请公众号留言!!! 串口作为 MCU 的重要外部接口,同时也是软件开发重要的调试手段,其重要性不言而喻。现在基本上所有的MCU都会带有串口,STM32自然也不例外。STM32F4的串口资源相当丰富的,功能也相当强劲。STM32F4开发板所使用STM32F407ZGT6 最多可提供 6 路串口,有分数波特...

GO程序设计1——快速入门

1.GO语言开发环境搭建                                             1.1编译环境安装 点击链接http://code.google.com/p/go/downloads/list 选择一个版本,本人下载的是go1.0.3.windows-386.msi 双击安装,选择安装一个安装主目录:例如,C:\Go,不需...

anaconda2下面安装opencv2.4.13.4完成----解决默认安装的问题----Thefunction is not implemented. Rebuild the library with Windows, GTK+ 2.x orCarbon support. If you are on Ubuntu or Debian, install libgtk2.0‑dev and pkg

转载自: http://blog.csdn.net/qingyanyichen/article/details/73550924 本人下载编译安装了opencv2.4.9,oppencv2.4.10,opencv2.4.11,opencv3.0.0,opencv3.1.0,opencv3.2.0版本,总结anaconda下opencv安装经验如下。   1...

提高unigui开发效率的两个方法(02)

1、编译时自己退出运行的程序。 在做unigui开发时,每次编译运行时,unigui的应用都会在后台运行,每次重新编译时都必须手工在任务栏里将应用退出才行,非常麻烦,可以在项目编译的参数里加上杀进程的命令,这样每次重新编译时就会自动将旧的进程杀掉。 命令参数如下:taskkill /f /im $(OUTPUTFILENAME) 2>1 ||...

ffmpeg编译与移植问题

1、下载ffmpeg。 下载网址:http://www.ffmpeg.org/download.html 2、解压缩 tar -zxvf ffmpeg-2.0.1.tar.gz 3、配置,生成Makefile ./configure --enable-shared --disable-yasm --prefix=/usr/local/ffmpeg 如果...