LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1141|回复: 4

gcc各个组件的功能请教~~

[复制链接]
发表于 2009-5-14 14:31:03 | 显示全部楼层 |阅读模式
gcc各个组件的功能请教~~
只使用c/c++两种语言,涉及的组件有:
6.14.2. Contents of GCC
Installed programs:
c++, cc (link to gcc), cpp, g++, gcc, gccbug, and gcov

Installed libraries:
libgcc.a, libgcc_eh.a, libgcc_s.so, libmudflap.{a,so}, libssp.{a,so}, libstdc++.{a,so}, and libsupc++.a

Short Descriptions
c++
The C++ compiler
cc
The C compiler
cpp
The C preprocessor; it is used by the compiler to expand the #include, #define, and similar statements in the source files
g++
The C++ compiler
gcc
The C compiler
gccbug
A shell script used to help create useful bug reports
gcov
A coverage testing tool; it is used to analyze programs to determine where optimizations will have the most effect
libgcc
Contains run-time support for gcc
libmudflap
Contains routines that support GCC's bounds checking functionality
libssp
Contains routines supporting GCC's stack-smashing protection functionality
libstdc++
The standard C++ library
libsupc++
Provides supporting routines for the C++ programming language

上面摘自LFS 6.4手册,参考论坛的http://www.linuxsir.cn/bbs/showthread.php?t=152770帖子,大概知道了一些组件的作用:
c++        gcc的一个版本,默认语言设置为c++,而且在连续的时候自动包含标准c++库。这和g++一样
ccl        实际的c编译程序
cclplus        实际的c++编译程序
collect2               在不使用GNU链接程序的系统上,有必要运行collect2来产生特定的全局初始化代码(例如c++的构造函数和析构函数)
g++        gcc的一个版本,默认语言设置为c++,而且在链接的时候自动包含标准c++库,这和c++一样
gcc        该驱动程序等同于执行编译程序和链接程序以产生必要的输出

libgcc        该库包含的例程被作为编译程序的一部分,是因为它们可被链接到实际的可执行程序中。它们是特殊的例程,链接到可执行程序,来执行基本的任务,例如浮点运算。这些库中的例程通常都是平台相关的。

libstdc++               运行时库,包括定义为标准语言一部分的所有的c++类和函数                 
 楼主| 发表于 2009-5-14 14:37:28 | 显示全部楼层
从上面可以知道cc跟gcc一般都是一样的,因为cc是gcc的一个link
而cpp是预处理程序
但是c++跟g++有什么分别呢?

cc1才是实际的C编译程序
cc1plus是实际的C++编译程序
也就是说不管是gcc,还是g++/c++,都不能完成具体的编译工作,而是来调用其他工具来完成的编译的。
这样的话,使用gcc来编译程序时,gcc调用了哪些程序呢?调用的过程又是怎样的呢?是否是这样的:预处理程序cpp、编译程序cc1、连接器ld?
类似,使用g++/c++来编译程序时,g++/c++调用的程序和过程是否是这样的:预处理程序cpp、编译程序cc1plus、连接器ld?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-5-14 14:55:48 | 显示全部楼层
在编译安装gcc时,提示的安装内容没有包括libexec目录下的相关程序,这是为何呢?
[color="Red"]在libexec目录下有cc1、cc1plus、collect2,这是三个程序都是很重要的,为什么在LFS手册中没有提到呢?
cc1、cc1plus的作用很好理解
但是collect2到底起什么作用呢?
collect2 在不使用GNU链接程序的系统上,有必要运行collect2来产生特定的全局初始化代码(例如c++的构造函数和析构函数)

这个好像不是很正确。
常见有如下两个错误:
collect2:ld returned 1 exit status
collect2: cannot find `ld'

这样看起来是通过collect2来调用ld的,不知是否是这样?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-5-16 18:04:47 | 显示全部楼层
通过gcc -v test.c看到了编译过程中调用的那些程序
不过gcc -time test.c没有任何的显示结果 不知是为何
回复 支持 反对

使用道具 举报

发表于 2009-5-16 22:13:13 | 显示全部楼层
偶在
http://www.linuxsir.cn/bbs/post1987960-10.html
已经给出您答案了。
作为习惯的一部分,请注意 libexec 对应目录下的程序 一般 不是给用户直接使用的,而是由其他程序调用简洁执行,比如您提到的 cc1 等 是由 gcc 调用执行。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表