gcc 编译器是 Linux 下默认的 C/C++ 编译器,大部分 Linux 发行版中都是默认安装的。gcc 编译器通常以 Linux 命令的形式在终端(Shell/Bash)中使用。

单一源文件
最基础用法
hello.c代码如下:

#include <stdio.h>int main(void){    printf("Hello World!\n");}

使用gcc编译:

gcc hello.c

使用ls命令查看当前目录,多出一个a.out可执行文件,运行:

./a.outHello World!

注意:gcc编译源码,不加任何参数时,生成的可执行性文件默认为a.out,并且没有中间过程的目标文件。

生成目标文件&自定义名称
使用-c参数可以生成.o结尾的目标文件:

gcc -c hello.c

使用ls命令查看当前目录,多出一个hello.o目标文件。

继续使用-o参数生成可执行文件,并自定义名称:

gcc -o hello hello.o

其中 “hello” 是指定生成的可执行文件的名称,可以执行测试:

./hello
Hello World

多个源文件
当存在多个源文件,并且文件间存在依赖关系时,必须要先生成各自的目标文件,再链接成可执行文件。

thank.c源码如下:

#include <stdio.h>int main(void){    printf("Hello World\n");    thanks_2();}

thank_2.c源码如下:

#include <stdio.h>void thanks_2(void){    printf("Thank you!\n");}

注意到thanks.c需要用到thanks_2.c中的函数,先编译:

gcc -c thanks.c thanks_2.c

编译成功后会生成thanks.o和thanks_2.o目标文件,继续链接:

gcc -o thanks thanks.o thanks_2.o

执行生成的thanks可执行文件:

./thanksHello worldThank you!

注意:编译阶段可以添加-O参数进行程序优化,或是-Wall参数显示详细的编译信息,如:

gcc -O -c thanks.c thanks_2.cgcc -Wall -c thanks.c thanks_2.c

调用外部函数库
sintest.c代码如下:

#include <stdio.h>#include <math.h>int main(void){    float value;    value = sin(3.14/2);// 即pai/2 = 90°}

函数中用到了sin三角函数,包含了math.h数学库,因而在编译阶段需要连接对应的数学库。

gcc sintest.c -lm -L/lib -L/usr/lib

其中,-lm可理解为两部分,-l是加入某个函数库,m则是libm.so的代称。

后面的-L参数用于指定库的搜索路径,由于Linux的默认库的位置就是在lib文件目录下,因此可以省略不写,如果是其它的第三方库,则需要指明库文件的位置。

另外,对于第三方的头文件,也许指明头文件的路径,比如stdio.h这个文件,如果它不是系统认识的文件,则在编译时需要通过-I参数知名位置:

gcc sintest.c -lm -I/usr/include

参考:《鸟哥的Linux私房菜 (基础学习篇 第三版)》

©著作权归作者所有:来自51CTO博客作者mb5fdb1021b5992的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Linux与Windows间文件互传之TFTP方式
  2. Linux makefile使用基础
  3. 安卓2
  4. 【Java Spring Cloud 实战之路】- 2 创建项目
  5. C# 数据操作系列 - 10 NHibernate初试
  6. 为CentOS7和CentOS6配置yum
  7. 【docker】容器运行nginx&&挂载宿主机文件
  8. 社区leaf学习笔记|02. leaf服务器文件配置IP及端口
  9. 轻度Linux服务器维护人员常用的Shell脚本命令

随机推荐

  1. 怎样使用React Context API [每日前端夜
  2. 7个开放式的 HTML 面试题及回答策略 [每
  3. 尝鲜 ES2019 的新功能 [每日前端夜话0x38
  4. 表弟的数学题,我竟然用了python才解出来
  5. 7 个开放式 CSS 面试题及回答策略 [每日
  6. 在北京看场雪为什么这么难?
  7. 用python对2019年二手房价格进行数据分析
  8. 基于 Babel 的 npm 包的最小化设置 [每日
  9. 一文学懂 TypeScript 的类型 [每日前端夜
  10. 通过 Web 控制蓝牙设备:WebBluetooth入门