11、GCC的基本使用

简介: 一. 常用编译命令选项    假设源程序文件名为test.c。 1. 无选项编译链接 用法:#gcc test.c 作用:将test.c预处理、汇编、编译并链接形成可执行文件。

一. 常用编译命令选项   

假设源程序文件名为test.c

1. 无选项编译链接

用法:#gcc test.c

作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out

2. 选项 -o

用法:#gcc test.c -o test

作用:将test.c预处理、汇编、编译并链接形成可执行文件test-o选项用来指定输出文件的文件名。

3. 选项 -E

用法:#gcc -E test.c -o test.i

作用:将test.c预处理输出test.i文件。

4. 选项 -S

用法:#gcc -S test.i

作用:将预处理输出文件test.i汇编成test.s文件。

5. 选项 -c

用法:#gcc -c test.s

作用:将汇编输出文件test.s编译输出test.o文件。

6. 无选项链接

用法:#gcc test.o -o test

作用:将编译输出文件test.o链接成最终可执行文件test

7. 选项-O

用法:#gcc -O1 test.c -o test

作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。

二. 多源文件的编译方法

如果有多个源文件,基本上有两种编译方法:

[假设有两个源文件为test.ctestfun.c]

1. 多个文件一起编译

用法:#gcc testfun.c test.c -o test

作用:将testfun.ctest.c分别编译后链接成test可执行文件。

2. 分别编译各个源文件,之后对编译后输出的目标文件链接。

用法:

#gcc -c testfun.c //testfun.c编译成testfun.o

#gcc -c test.c //test.c编译成test.o

#gcc testfun.o test.o -o test //testfun.otest.o链接成test

    以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。

三、gcc编程环境基础--编译时头文件和库文件路径指定

预处理(preprocessing),编译(compilation),汇编(assembly)和连接(linking)

※includeheader文件,连结数据库,系统定义,总共有下列来源指定gcc去那找

当初在编译时指定的(~gcc/gcc/collect2.c:locatelib()

写在specs内的

后来用-D -I -L指定的

gcc环境变量设定(编译的时候)

ld.so的环境变量(这是run time的时候)

1.头文件

gcc在编译时怎么去寻找所需要的头文件 :

※header file的搜寻会从-I开始

然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH

再找内定目录

/usr/include

/usr/local/include

/usr/lib/gcc-lib/i386-linux/2.95.2/include

/usr/lib/gcc-lib/i386-linux/2.95.2/include/g++-3

/usr/lib/gcc-lib/i386-linux/2.95.2/i386-linux/include

2.库文件

cos()等函式库的选项要多加 -lm

编译的时候:

※gcc会去找-L

再找gcc的环境变量LIBRARY_PATH

再找内定目录 /lib /usr/lib /usr/local/lib

3.利用Linux系统上已有的研发库

(1).查看库文件提供了哪些调用

能用nm命令自己查看库文件提供了哪些调用

(2).通过头文件查看函数的定义

Wc -l 查看文件的内容

    Gcc 预编译技术首先将头文件解析成临时文件,在某个源代码文件需要时,读入临时文件。可以用g++单独编译一个头文件

    编译阶段主要进行源代码的完整性检测,然后将代码翻译成汇编语言,而汇编阶段主要进行汇编代码向目标代码的翻译。

4.函数库分为:

静态库:后辍一般为.a

动态库:共享库,.so(share object),一般格式为*.so.x,x为版本。

目录
相关文章
|
编译器 Linux 开发工具
|
NoSQL 编译器 开发工具
006.gcc编译器
gcc是什么?
170 0
006.gcc编译器
|
存储 NoSQL 算法
从一个crash问题展开,探索gcc编译优化细节
问题分析的过程也正是技术成长之路,本文以一个gcc编译优化引发的crash为切入点,逐步展开对编译器优化细节的探索之路,在分析过程中打开了新世界的大门……
|
9月前
|
存储 编译器 C语言
深入理解GCC 和 G++ 编译器
GCC 和 G++ 是 GNU 工具链中的核心编译器,支持 C 和 C++ 程序开发。本文详细介绍其编译流程、常用选项及动态链接与静态链接的区别。编译过程分为预处理、编译、汇编和链接四个阶段,每个阶段有特定任务和命令选项。常用选项如 `-E`、`-S`、`-c` 和 `-o` 分别用于预处理、生成汇编代码、生成目标文件和指定输出文件。动态链接节省空间且易于更新,但依赖运行时库;静态链接独立高效,但文件较大且更新困难。合理选择优化选项(如 `-O0` 至 `-O3`)可提升程序性能。掌握这些知识有助于开发者更高效地编写、调试和优化代码。
382 23
深入理解GCC 和 G++ 编译器
|
前端开发 C语言
gcc动态库升级
gcc动态库升级
|
12月前
|
编译器 Linux C语言
gcc的编译过程
GCC(GNU Compiler Collection)的编译过程主要包括四个阶段:预处理、编译、汇编和链接。预处理展开宏定义,编译将代码转换为汇编语言,汇编生成目标文件,链接将目标文件与库文件合并成可执行文件。
355 11
|
编译器 开发工具 C语言
Gcc 链接文件
Gcc 链接文件
114 4
|
编译器 C语言 C++
MinGW安装gcc
MinGW安装gcc
353 0
|
C语言
gcc的简易用法
【5月更文挑战第10天】gcc的简易用法。
137 8
|
C语言
gcc的简易用法(编译、参数与链接)
【5月更文挑战第14天】gcc的简易用法(编译、参数与链接)。
129 1