GCC学习笔记

来源:互联网 发布:淘宝店铺首页怎么弄 编辑:程序博客网 时间:2024/05/21 22:23

1.简介

    GCC(GNU Compiler Collection,GNU编译器集合)是一套由GNU工程开发的支持多种编程语言编译器。GCC是自由软件发展过程中的著名例子,由自由软件基金会GPL协议发布。GCC是大多数类Unix操作系统(如LinuxBSDMac OS X等)的标准的编译器,GCC同样适用于微的Windows。GCC支持多种计算机体系芯片,如x86ARM,并已移植到其他多种硬件平台。GCC原名为GNU C编译器(GNU C Compiler),因为它原本只能处理C语言。GCC很快地扩展,并支持处理C++。后来又扩展能够支持更多编程语言,如FortranPascalObjective-CJavaAdaGo等。

2.文件约定

gcc所遵循的部分约定规则:
.c为后缀的文件,C语言源代码文件;
.a为后缀的文件,是由目标文件构成的档案库文件;
.C,.cc或.cxx 为后缀的文件,是C++源代码文件且必须要经过预处理;
.h为后缀的文件,是程序所包含的头文件;
.i 为后缀的文件,是C源代码文件且不应该对其执行预处理;
.ii为后缀的文件,是C++源代码文件且不应该对其执行预处理;
.m为后缀的文件,是Objective-C源代码文件;
.o为后缀的文件,是编译后的目标文件;
.s为后缀的文件,是汇编语言源代码文件;
.S为后缀的文件,是经过预编译的汇编语言源代码文件。

3.程序的编译过程

test.c  test.h——预处理——>test.i——编译——>test.s——汇编 ——>test.o ——链接——>test

 原文件                  |                               |       汇编文件          |        机器语言         |            二进制可执行

(1)预处理

处理源文件中的#ifdef、 #include和#define命令

gcc -E  test.c -o test.i

(2)编译

编译后生成汇编语言文件*.s 

GCC -S test.i -o test.s

(3)汇编

将输入的汇编文件*.s转换成机器语言*.o

    GCC -c test.s -o test.o

(4)链接

    在连接阶段将输入的机器代码文件*.s(与其它的机器代码文件和库文件)汇集成一个可执行的二进制代码文件。

    GCC test.o -o test

注:一般来说前三个步骤合并为一个步骤:

GCC -c test.c -o test.o 

或者

四个步骤合并为一个步骤:

GCC -o test test.c

4. 链接参数(-l/L)

(1)-l 指定程序要链接的库名。

如:数学库,库文件名是libm.so,库名是m,把库文件名的头lib和尾.so去掉就是库名了。  

命令:libxxx.so -lxxx

-l 可以直接链接的库必须放在: /lib, /usr/lib, /usr/local/lib 中

(2)-L 指定链接目录

如果要链接的库不在上述的目录下,必须使用-L指定库的目录。如X11的库,它放在/usr/X11R6/lib目录下。

命令: -L/usr/X11R6/lib -lX11


5. include : -I 指定header 目录

/usr/lib 不用指定

例如,假设存放源文件的子目录名为./src,而包含文件则放在层次的其他目录下,如./inc。当我们在./src 目录下进行编译工作时:

gcc test.c –I../inc -o test

指定多个include文件:

gcc test.c –I../inc –I../../inc2 -o test


6. 编译优化 -O

-O,-O2,-O3

7. -share 编译动态链接库

gcc -share -test.c -o libtest.so




      


原创粉丝点击