Keep on going, never give up.

Gcc编译器介绍

Gcc是GNU推出的多平台编译器,原名为GNU C Compiler,原来只是做C语言编译器,后来发展支持处理C++,继而可处理Fortran、Java、Pascal等语言,Gcc支持在多种硬体平台上编译可执行程序,目前,Gcc是Unix类操作系统的标准编译器。

Gcc官方网址:http://gcc.gnu.org/,官方文档经常更新,建议阅读最新的GNU编译器文档。我们常说的gcc编译器(也称cc编译器),g++编译器(也称c++编译器)。

一、Gcc输入文件约定

Gcc对输入文件约定规则如下:

  • .c后缀文件——C语言源文件
  • .a后缀文件——由目标文件构成的档案库文件
  • .C或.cc或.cxx后缀文件——C++源文件
  • .h后缀文件——头文件;
  • .i 后缀文件——经过预处理的C源文件
  • .ii后缀文件——经过预处理的C++源文件
  • .m后缀文件——Objective-C源文件
  • .o后缀文件——编译后的目标文件
  • .s后缀文件——汇编语言源码文件
  • .S/.sx后缀文件——经过预编译的汇编语言源码文件

更多文件格式,请参考官方Gcc编译器PDF文档。

二、Gcc执行过程

同其它编译器相似,Gcc执行过程包括:预编译(Preprocessing)、编译(Compilation)、汇编(Assembly)和连接(Linking)四个阶段。

三、Gcc基本用法

Gcc最基本语法格式:gcc [options] [filenames]

其中,options为编译选项参数,filenames为编译文件名。注意:如编译C++则使用c++/g++ [options] [filenames],其它语言编译需要安装协议规范。

其中,[options]常用值如下(部分):

  • -c,只编译不连接为可执行文件,最后只生成.o为后缀的目标文件
  • -o output_filename,设置编译输出文件名为output_filename,gcc预设的输出可执行文件名为a.out
  • -O,对程序进行优化编译、连接,提高目标程序的执行效率,影响编译速度
  • -O2,比-O更好的优化编译、连接,影响编译速度
  • -Idirname,为编译设置程序头文件目录列表,或者叫搜索路径,编译器会自动到该目录下查找所需的头文件。
  • -Ldirname,为编译设置库文件目录,或者叫库搜索路径,连接时,编译器会自动到该目录下查找。
  • -lname,要求编译器连接时装载名字为“libname.a”的函数库,注意名称,示例-lbb则表示libbb.a库。
  • -shared,编译动态库

gcc执行错误一般包括:C语法错误、头文件错误、链接库错误和未定义错误。在做脚本编译时,常会遇到几个常见环境变量:

  • CC:指定c编译器
  • CXX:指定cxx编译器
  • LIBS:指定依赖库,类似--libs
  • CFLAGS:类似--cflags,指定预定宏

四、Gcc编译实例

1、编译C文件

#gcc test.c -o tst

编译test.c C文件,生成tst.o

2、编译C++文件

#g++ Test.cpp -o tst

编译Test C++文件,生成tst.o

3、引用外部头文件

#g++ -I/usr/include/mysql/ test.cpp -o tst

4、引用到外部库

#g++ -lmysqlclient test.cpp -o tst

5、添加外部库查找路径

#g++ -L/usr/local/mysql/lib test.cpp -o tst

6、程序用到了long long类型

#g++ -pedantic -Wno-long-long test.cpp -o tst

差不多了,其它还有很多组合,参照官方文档设置即可。 

相关评论(0):  

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客

最新文章

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载也必须遵循“署名-非商业用途-保持一致”的创作共用协议. 返回顶部
Copyright@2005-2016 Metsky.com, All rights Reserved.