webdancer's Blog
gcc使用--编译c++程序
gcc的c++编译器可以产生可执行的目标代码,而且其作为补充加入到gcc中的。直接使用gcc命令來编译c++程序,会出现错误。例如 程序1 exam.cc:
#include<iostream> int main(int argc,char * argv[]){ std::cout<<"hello world"<<std::endl; return 0; }
命令1: gcc exam.cc (错误) 。程序编译错误,“ld returned 1 exit status“,无法编译通过。
命令2: gcc -lstdc++ exam.cc 。程序编译通过。-l:链接库文件。
命令3: g++ exam.cc 。程序编译通过。
g++ is a program that calls GCC and treats .c, .h and .i files as C++ source files instead of C source files unless -x is used, and automatically specifies linking against the C++ library.
(g++ 会自动调用GCC,而且会将.c,.h,.i作为c++源文件而不是c的源文件,除非-x 选项被使用,而且自动链接c++库.)。也就是将语言默认为c++了。
后缀:
头文件:C++文件的头文件较多,可以使用.hh, .hpp, .H, 或者.tcc。
源文件: .C, .cc, .cpp, .CPP, .c++, .cp, or .cxx。
汇编语言文件:.ii。
注意:
库文件:c++的库文件名为stdc++.a,包含几乎所有的c++例程。
其他的命令与前面GCC的简单使用的差不多。所以就不说了。当然,编译程序肯定会遇到各种的问题,一定要注意查资料。
GCC的简单使用
这学期要学操作系统的课程设计了,编译器的学习是必需的了。当然,由于平台基于Linux,所以学习GCC是必须的了。
GCC 是“GNU Compiler Collection” 的简称,而不是以前的 “GNU C Compiler “。它支持 c ,c++,object-c,objectc+,Fortran,Java和Ada。 GCC编译器的选项真的非常之多,通常可以分成三种:
1.平台相关的选项。所谓的平台,是指机器(主要是芯片)和OS。下表:
Hardware |
Operating System
|
PowerPC |
Linux
|
Sparc |
Linux
|
ARM |
Linux
|
Intel x86 |
Cygwin Linux
|
2.语言相关的选项。
3.一般性选项。
GCC的编译过程:
预处理、编译、汇编、链接;通过一定的gcc选项,可以使编译过程停留在某一阶段。例如:-C 可以阻止链接过程,只是产生目标文件。文件的后缀通常决定怎么编译。例如:
.a |
Static object library (archive). |
.c |
C source code that is to be preprocessed. |
.h |
C source code header file. |
.i |
C source code that is not to be preprocessed. This type of file is produced as an intermediate step in compilation. |
.o |
An object file in a format appropriate to be supplied to the linker. This type of file is produced as an intermediate step in compilation. |
.s |
Assembly language code. This type of file is produced as an intermediate step in compilation. |
集中常用的gcc命令:
(1)、单个源文件产生可执行文件。
命令:源文件:a.c
gcc a.c
结果:产生a.out 可执行文件。
(2)、产生目标文件。
命令:gcc -c a.c -o a.o
结果:产生a.o目标文件。
(3)、多个源文件产生可执行文件。
命令: gcc a.c b.c -o a
(4)、预处理。
命令: gcc -E a.c -o a.i
(5)、产生汇编文件。
命理: gcc -S a.c
(6)、创建静态库。
命令:gcc -c a.c b.c
ar -r liba.a a.o b.o
(7)、创建动态库。
命令:gcc -c -fpic a.c b.c
gcc -shared a.o b.o -o a.so
(8)、避免后缀转换。
命令: gcc -xc a.ccc (-x 后面跟具体的语言。)