+ -
当前位置:首页 → 问答吧 → gcc各个组件的功能请教~~

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

时间:2009-05-14

来源:互联网

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.org/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++类和函数

作者: lofeng   发布时间: 2009-05-14

从上面可以知道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?

作者: lofeng   发布时间: 2009-05-14

在编译安装gcc时,提示的安装内容没有包括libexec目录下的相关程序,这是为何呢?
在libexec目录下有cc1、cc1plus、collect2,这是三个程序都是很重要的,为什么在LFS手册中没有提到呢?
cc1、cc1plus的作用很好理解
但是collect2到底起什么作用呢?
引用:
collect2 在不使用GNU链接程序的系统上,有必要运行collect2来产生特定的全局初始化代码(例如c++的构造函数和析构函数)
这个好像不是很正确。
常见有如下两个错误:
引用:
collect2:ld returned 1 exit status
collect2: cannot find `ld'
这样看起来是通过collect2来调用ld的,不知是否是这样?

作者: lofeng   发布时间: 2009-05-14

通过gcc -v test.c看到了编译过程中调用的那些程序
不过gcc -time test.c没有任何的显示结果 不知是为何

作者: lofeng   发布时间: 2009-05-16

偶在
http://www.linuxsir.org/bbs/post1987960-10.html
已经给出您答案了。

引用:
作为习惯的一部分,请注意 libexec 对应目录下的程序 一般 不是给用户直接使用的,而是由其他程序调用简洁执行,比如您提到的 cc1 等 是由 gcc 调用执行。

作者: 聚焦深空   发布时间: 2009-05-17

热门下载

更多