目录
一、GCC编译器
1.1 什么是GCC
GNU编译器套件(GNU Compiler Collection)
GNU:是GNU is Not Unix的递归缩写,即类Unix操作系统
Linux:Linux Is Not UniX
PNG:PNG’s Not GIF
RPM:RPM Package Manager
检验GCC:gcc --version 查看GCC版本
CentOS 安装:yum install gcc 默认已安装
Ubuntu 安装:apt-get install gcc 默认已安装
1.2 GCC编译过程及参数说明

第一个用命令表示就是
gcc -E hello.c -o hello.i
gcc -S hello.i -o hello.s
gcc -c hello.s -o hello.o
gcc hello.o -o hello
#运行
./hello
这些后缀说明:
.c:就是c文件(c file)
.i 预处理 C 源代码后产生的中间文件(Intermediate file)
.s 汇编代码文件(Assembly file)
.o:目标文件(Object file).file.cc, file.cp, file.cxx, file.cpp, file.CPP, file.c++, file.C: 没有预处理过的 C++ 源代码文件
参数说明

1.3例子

1.4 查看命令
uname -a 看系统
file hello32.out 看程序
file hello64.out
1.5 常用问题
/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录
解决办法:
yum install glibc-devel
二、多文件编译
H + C 一个头文件,一个源文件
H+ C + C 一个头文件,两个源文件
(N)H + C 多个头文件,一个源文件
(N)H + (N)C 多个头文件,多个源文件
2.1 H + C

2.1 H + C + C


2.3 (N)H + C
参照一个头文件,一个源文件
2.4 (N)H + (N)C
参照一个头文件,两个源文件
三、GDB调试工具
3.1 查看帮助
GDB:GNU DeBuger
man gdb 查看帮助手册
3.2 常用命令
在目标文件加入源代码 gcc -g xxx.c -o xxx
gdb xxx 开始调试
(gdb) list 或者 l 列出所有代码
(gdb) run 或者 r 运行程序
(gdb) start 开始调试
(gdb) quit 或者 q 退出调试
(gdb) next 或者 n 运行下一行,仅在当前函数
(gdb) step 或者 s 运行下一行,可进入函数
(gdb) print 或者 p 变量名 打印变量当前值
(gdb) set var i=3 局部变量设置
(gdb) info 或者 i 查看信息 locals 查看当前变量
(gdb) break 或者 b 设置断点,接行号或函数
(gdb) continue 或者 c 继续运行,直到下一个断点
(gdb) delete或者d 删除断点
(gdb) info 或者i breakpoints 列出断点
四、静态链接库
4.1 介绍
静态链接库在windows和linux系统中均存在相同概念
静态链接库以二进制文件形式存在,可链接为可行执行文件
静态链接库提供变量及函数,以提供功能函数为主要目的
windows的静态链接库为.lib文件,linux的静态链接库为.a文件
静态链接库之间及与可执行文件间无依赖关系
4.2 生成方式
gcc -c xxx.c -o xxx.o
生成方式一:ar rs libxxx.a xxx.o
生成方式二:ar r libxxx.a xxx.o ranlib libxxx.a
使用方法:gcc main.c -L. -lxxx -o main
五、动态链接库
5.1 介绍
动态链接库在windows和linux系统中均存在相同概念
动态链接库以二进制文件形式存在,可动态被可执行文件加载
动态链接库提供变量及函数,以提供功能函数为主要目的
windows的动态链接库为.dll文件,linux的动态链接库为.so文件
动态链接库之间及与可执行文件间存在依赖关系
5.2 生成方式
gcc -fPIC -c xxx.c -o xxx.o
生成方式:gcc -shared xxx.o -o xxx.so
使用方法:gcc main.c -L. -lxxx -o main

本文详细介绍了GCC编译器的功能与使用方法,包括编译过程、参数说明及常见问题解决方案。同时,深入探讨了多文件编译、GDB调试工具的使用,以及静态链接库和动态链接库的生成与使用方式。

被折叠的 条评论
为什么被折叠?



