本文内容:

  1. gcc编译器的使用
  2. 静态库与动态库
  3. Make工程管理文件
  4. gdb调试工具

gcc编译器

编译流程:

源程序(*.c) => 预处理 => 编译 => 汇编 => 链接 => 可执行文件

编译选项:

编译选项 功能
-o 指定输出文件,默认:a.out
-E 仅进行预处理,生成预处理代码(直接输出,可通过-o输出到文件)
-S 编译到汇编语言,生成汇编代码:*.s
-c 编译汇编到目标代码,不进行链接,生成目标文件:*.o
-g 编译时在可执行文件中插入调试信息,以便gdb进行调试
-Wall 显示更多警告信息
-O n 优化编译,提高可执行程序的运行速度,n可取值:1,2,3
lx 链接x链接库,对于库文件为libx.so或libx.a(e.g. lm 链接数学库)
Idir 指定头文件的位置
Ldir 指定库文件的位置

注意参数顺序:-l(小写L),-I(大写i),-L需在-o和文件名之后

函数库

函数库是一组预先编译好的函数集合,以便重复使用。

静态库:*.a

共享库(动态库):*.so

静态库

在链接阶段,编译器将指定的静态库和程序代码结合生成可执行文件。

创建静态库

将源码编译为目标文件(*.o),然后使用ar创建静态库

ar cr[v]/f 静态库 目标文件列表

c 创建归档

r 将目标文件追加或者替换原有文件

v 显示过程信息

f 显示库文档列表

ar cr libsort.a sort.o parray.o  #通过两个函数的汇编文件建立静态库
ar -t libsort.a #查看库中文件
gcc -o test main.c -lsort -L    #-L在当前目录下搜索库文件libsort.a#得到可执行文件test

共享库

在编译时,并不将函数库的代码插入到可执行程序中,而是将库的引用插入,在执行期动态的加载函数库。

Make工程管理

make命令

在模块化开发中,make来根据程序模块的修改情况重新编译链接目标代码,以保证目标代码总是由它的最新模块组成。

Makefile文件

使用make命令时,必须编写Makefile文件。Makefile描述了软件包中各个文件之间的依赖关系,提供了更新每个文件的命令。

主要内容:显式规则,隐式规则,变量定义,文件指示,注释

make使用

make [选项] [宏] [目标]

-f makefile 指定规则文件,默认Makefile

-d 显示调试信息

-n 显示命令,但不执行

-s 执行命令但不显示任何信息

make规则

make根据make规则执行命令对目标文件进行编译更新,规则保存在规则文件中,默认名为GNUmakefile、makefile或Makefile。
一个Makefile文件主要由一系列的make规则组成,每条规则包含:

目标文件:依赖文件列表
<TAB>命令列表

Makefile文件示例:

#定义变量
CC = gcc
OBJS = main.c
TARGET = test#搜索源文件,更改文件延展名
SRC = $(wildcard *.c)#搜索.c文件
OBJ = $(patsubst %.c,%.o,$(SRC))#将.c文件转化为.o文件#添加参数
CFLAGS += -g -Wall --std=c89#添加链接
LFLAGS += -lm#链接函数库
$(TARGET) : test.o  #$(OBJ)$(CC) $^ $(LFLAGS) -o $@#编译源文件
test.o : test.c     #将test.c编译为test.o$(CC) -c $^ $(CFLAGS) -o $@
#$(OBJ) : $(SRC)
#   $(CC) -c $^ $(CFLAGS) -o $@#删除文件
clean :$(RM) -r $(OBJ) test#编译、链接时必须次行为Tab
#目标文件 : 依赖文件
#wildcard为搜索,patsubst为替换
#.c为源文件,.o为汇编文件#抑扬符($^)表示上行所有依赖文件
#艾特($@)  表示上行所有目标文件
#小于符($<)表示第一个依赖文件
#$+  所有的依赖文件,并以空格分开#使用定义变量时,必须以$()的格式使用
#Makefile 与 makefile 均可使用make命令,但makefile优先级更高,通常使用Makefile#链接第三方库时,可以用 INC = -I /usr/..../ 方式寻找头文件
#然后可以用(例如) LFLAGS += -lcairo 链接cairo库(绘图)
#也可以采用 LIBS = -L /usr/..../ (路径)进行链接第三方库#使用Makefile文件时,make命令执行编译,链接,且仅对变化有效
#删除文件时使用make clean命令,RM为Makefile文件自带变量,RM = rm -f

gdb调试工具

跟踪指定程序的运行,给出它的内部运行状态以协助开发者定位程序中的错误。

gdb [选项] [可执行程序]

-n 不执行任何初始化文件中的命令,默认初始化文件为 .gdbinit
-q 安静模式运行,不输出介绍和版权信息
-cd dir 将dir作为调试的工作目录,默认为当前目录

gdb命令

命令 作用
file 装入待调试程序
set args < 文件名 重定向输入文件
list(l) 列出源文件,默认显示10行【main函数开始】
next(n) 执行下一行程序但不进入函数
step(s) 执行下一行程序且进入函数
kill 终止当前调试程序
run® 执行当前程序
watch 动态监视指定变量的值,当变量变化时立即暂停执行
print§ 打印表达式值
break(b) n 在第n行设置断点
quit(q) 退出调试
fin 结束当前函数
continue© 运行到下一个断点
delete n 删除第n号断点
info 查看状态信息

注意在进行调试的时候,先添加断点,让程序执行可以在某一处停下,随后运行run命令开始调试

b 12 #在第12行添加断点
info breakpoint #查看所有断点编号及位置
delete 1#删除1好断点
p a#查看a的值,或者查看数组a的所有元素
p a[0]@10#查看从a[0]开始的10个元素,当数组内存较大时,不适合采用p a的方法

linux的C开发工具相关推荐

  1. Linux下C++开发工具介绍

    概述     就C++开发工具而言,与Windows下微软(VC, VS2005等)一统天下相比,Linux/Unix下C++开发,可谓五花八门,各式各样.Emacs, vi, eclipse, an ...

  2. 【Linux】Linux环境基础开发工具使用 —— yum | vim | gcc g++ | gdb | make makefile | 进度条 | git

    Linux环境基础开发工具使用 1. Linux软件包管理器yum 1.1 什么是软件包 1.2 软件安装三板斧 1.2.1 查看软件包 1.2.2 安装软件 1.2.3 卸载软件 2. vim 2. ...

  3. L1D1:嵌入式Linux C语言开发工具及基础命令

    嵌入式Linux C语言开发工具及基础命令 一.ubuntu环境搭建 请自行准备VMware workstation15安装包 及 ubuntu18.04.iso镜像文件.可参考链接:VMware W ...

  4. 2 Linux环境基础开发工具

    2 Linux环境基础开发工具 2.1 Linux软件包管理器yum 2.1.1 软件安装的方式 1. 源码安装 大多数开源的软件都是源码的形式.拿过来自己编译,安装. 优点:源码安装兼容性好. 缺点 ...

  5. 【Linux】基础:Linux环境基础开发工具——make与Makefile

    [Linux]题解:Linux环境基础开发工具--make与Makefile 摘要:Makefile是一个文件定义了一系列的规则来指定编译过程以及更复杂的功能操作,make是一个命令工具,是一个解ma ...

  6. 【Linux系统】开发工具(上) {软件包管理器yum,更新yum源,文本编辑器vim,vim的四种基本模式,vim指令集,代码编译器gcc/g++}

    一.软件包管理器:yum 1.1 yum是什么? Linux下软件的安装方法: 源码安装:下载源码,在本地自行编译,然后才能安装. rpm安装:红帽软件包管理工具,属于安装包安装. yum安装:本身会 ...

  7. linux 下的前端编程工具,Prepros Linux版(前端开发工具)

    PreprosLinux版是一款前端开发工具,PreprosLinux版可以帮助用户编译文件,转换JavaScript,重新加载浏览器,并且使开发和测试网站变得非常容易,有需要可以下载. Prepro ...

  8. Fedora Linux虚拟机常用开发工具

    (我安装的Fedora31的linux内核版本=5.3.2) sudo gedit /etc/dnf/dnf.conf 开启fastmirror的方式是在 /etc/dnf/dnf.conf 中加入f ...

  9. Linux 环境基础开发工具的使用

    目录 Linux 软件包管理器 yum 1.软件包的概念 2.查看软件包 3.如何安装软件 4.如何卸载软件 Linux编辑器-vim使用 1. vim的基本概念 2. vim的基本操作 3. vim ...

  10. linux篇【3】:Linux 环境基础开发工具yum,vim,gcc,makefile,git

    目录 一.Linux 软件包管理器 yum 1.什么是软件包 2.centos 7中安装形式 3.yum安装好处: 4.yum工具的常用选项 (1)yum list | grep sl 软件包信息介绍 ...

最新文章

  1. 操纵神经元构造后门,腾讯朱雀实验室披露AI模型新型攻击手法
  2. 【萌味】小夕说,不了解动态空间增长的程序喵都是假喵(上)
  3. java 水印乱码,linux java程序加水印及中文乱码方案
  4. 如何用iOS工程生成iOS模拟器包
  5. 命运(HDU 2571 简单动态规划)
  6. component、constituent、element、ingredient的区别
  7. 使用apktool.jar工具反编译和回编译Android APK 终端命令模式
  8. 拓端tecdat|R语言圆填充( Circle packing)算法圆堆图圆形空间填充算法可视化
  9. 第三讲 对话框的创建
  10. Cookie的简单理解和使用
  11. matlab自适应遗传算法代码,自适应遗传算法MATLAB代码
  12. mysql 2037年,正确的方法来存储2037年之后的MySQL日期
  13. c语言程序如何防止盗用,如何用C语言程序盗取QQ密码
  14. 创新科技普济天下,华为无线重构世界
  15. python定义变量取值范围_python怎么限定函数自变量取值范围?
  16. js操作cookie有效期至当天晚上23点59分59秒的cookie
  17. 联想think station D30安装系统的时候找不到硬盘的解决方法
  18. python基于SVM的疫情评论情感数据分析
  19. 敏捷开发的项目管理工具分享
  20. 单代号网络图计算例题_电气图纸制图规范及电气图纸的识读方法、项目代号意义...

热门文章

  1. 关于三菱GXWORK安装失败或者安装向导被中断的解决办法
  2. Linux 路由实现原理
  3. 老照片修复_使用条款
  4. Qt多线程编程(一)入门篇
  5. 超前进位加法器原理与设计
  6. 阅读Android源码的一些姿势
  7. web开发-myeclipse下载git服务器代码方法-学习笔记五
  8. 长三角城市数字经济发展概况
  9. Resource not found: roslaunch的解决方法
  10. pymatgen正确安装姿势