在本机编译gcc之后,在目标目录/usr下可以看到如下几个目录:
bin include info lib libexec man share
bin目录包含如下文件:
addr2name.awk fastjar gccbug gcjh grepjar jcf-dump
c++ g++ gcj gcov grmic jv-convert
cpp gcc gcj-dbtool gij grmiregistry jv-scan
powerpc-unknown-linux-gnu-c++ powerpc-unknown-linux-gnu-gcc-4.0.0
powerpc-unknown-linux-gnu-g++ powerpc-unknown-linux-gnu-gcj
powerpc-unknown-linux-gnu-gcc powerpc-unknown-linux-gnu-gcjh
我们经常用的也就是gcc, g++, gcj。其他的就不太熟悉了。
gcc 是c的编译器,也是c, c++, java等编译器的入口,如果要编译的不是c文件,gcc会调用其他的编译器来编译。
g++是c++的编译器。
关于gcc和g++的区别,参考
知秋小筑
CC一般是makefile里面的一个名字,具体是什么根据实际情况决定。
gcc和g++都是GNU(组织)的一个编译器。
误区一:gcc只能编译c代码,g++只能编译c++代码
两者都可以,但是请注意:
1,后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的。C++的语法规则更加严谨一些。
2,编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接,为了统一起见,干脆编译/链接统统用g++了,这就给人一种错觉,好像cpp程序只能用g++似的。
误区二:gcc不会定义__cplusplus宏,而g++会
实际上,这个宏只是标志着编译器将会把代码按C还是C++语法来解释,如上所述,如果后缀为.c,并且采用gcc编译器,则该宏就是未定义的,否则,就是已定义。
误区三:编译只能用gcc,链接只能用g++
严格来说,这句话不算错误,但是它混淆了概念,应该这样说:编译可以用gcc/g++,而链接可以用g++或者gcc
-lstdc++。因为gcc命令不能自动和C++程序使用的库联接,所以通常使用g++来完成联接。但在编译阶段,g++会自动调用gcc,二者等价。
addr2name:这是用来替代某些系统上不存在addr2line的脚本。addr2line可以根据指定的elf文件中的地址来定位对应的源代码,当然这需要debug信息的支持。
fastjar:用来替代jdk中提供的jar命令,完全用c实现,所以效率比jar高。
gccbug:是一个shell脚本,帮助创建有价值的bug报告.gccbug会收集你的机器信息以及编译器本身的配置信息。
gcjh: 在开发JNI的时候,可以使用gcjh来为指定的class生成native头文件。
grepjar: 可以用来在jar文件中搜索指定模式的文字。"grep in a jar"
jcf-dump: 用来输出某个class的相关信息。
c++:这个和g++一样,不知道为什么不做个link。
gcj:gcc的java前端,可以把java源文件,java字节码编译成可执行的二进制文件。
gcov:覆盖测试工具,可以验证程序中哪些部分没有运行,一般用来确定测试用例的覆盖程度。
grmic: 用来生成java rmi的stub。"java rmi creator"?
jv-convert: 类似linux下的iconv,用来把文件从一种编码转成另外一种编码。
cpp: 是C预处理器。编译器用它来将 #include 和 #define 这类声明在源文件中展开。
gcj-dbtool: 用来管理java class文件映射数据库的工具,还不太清楚这个数据库具体用做什么。
gij:类似于jdk中的java,java字节码解释器
grmiregistry:用来启动java rmi远程组件的注册服务。
jv-scan:打印java源文件的有关信息。
接下来一些带前缀的文件其实都是和不带前缀的文件一样,应该只是为了调用方便,目前还不清楚哪些程序会使用他们(用这个编译器去生成交叉编译器时用?)为什么不做成link呢?
其他文件和库还有下面这些,下次再说吧。
安装下列程序: cc1, cc1plus, collect2
安装下列库文件: libgcc.a, libgcc_eh.a,
libgcc_s.so, libstdc++.[a,so] 和 libsupc++.a
阅读(1663) | 评论(0) | 转发(0) |