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 后面跟具体的语言。)

 


 




Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee