回顾昨天内容:
1.什么是操作系统?操作系统的功能?
2.GNU项目
3.计算机语言的发展史
gcc知识
-E 预处理
-S 编译(源程序到汇编语言)
-c 汇编或大编译
-o 用于指定要生成的文件的名字。
-Wall 编译的时候,将警告信息输出
-Werror 编译的时候,将警告信息当作错误信息输出
-L路径 告诉连接器到指定的路径下找库文件
-l库名 告诉链接器指定库的名字
.c 源文件
.i 预处理后的文件
.s 汇编文件
.o 目标文件
.h 头文件
.a 静态库文件
4.大型软件开发模型
第一步:确定头文件
第二步:实现头文件中的函数
第三步:函数的调用
预处理
宏定义
文件的包含
条件编译
5.nm的使用
nm 二进制文件
T
U
6.ldd的使用
7.typedef的使用
int count_t;
typedef int count_t;
count_t i;
int arr_t[3];
typedef int arr_t[3];
arr_t arr={1,2,3};
8.静态链接和动态链接
今天内容:
1.复习一下c语言的指针
* 是数据类型。
补充:
a)什么是数据类型?
数据类型就是数据在内存中的访问方式。
int char short float double void *
int *p;
int **p;
int *p[3];指针类型的数组
数组p有三个元素,每个元素中存放的都是地址。
int (*p)[3];p是指针类型的变量。int [3];
int main(int argc,char *argv[])
void (*fun)(int,int);
void *fun(int,int);
指针的综合案例:
代码参见point.c
point1.c
大端和小端的问题?
作业:写一个程序判断大端和小端。
回调函数
学习C语言的三句箴言:
1.常量和变量
2.先找到变量的地址,然后根据类型访问变量的内容
3.运算符的优先级及其结合性。
2.gdb调试工具的使用
以thmath文件夹下的文件为例讲解
在编译的时候加上-g/-ggdb参数,
意思是将调试信息加入到可执行文件里
gcc test.c tmath.c -g
a.out文件生成。
gdb a.out
gdb调试命令
l...列出程序的代码
b 函数的名字(或者行号) 设置断点
r 运行程序
n 执行下一条指令
p 变量的名字 输出变量的内容
s 切入到函数的内部执行step by step
q 退出gdb调试器
3.环境变量的使用
环境变量:操作系统为程序运行提供的环境的变量。
env(1) 察看系统的环境变量
格式:
name=value
name是环境变量的名字
value是环境变量的值
在等号的两边坚决不允许出现空格。
$环境变量
取环境变量的值
echo $环境变量
将环境变量的值输出到显示器
具体的环境变量:
USER 当前用户的名字
PATH 指定命令的查找路径。
echo $PATH
在文件~/.bashrc
~代表当前用户的工作主目录
export PATH=$PATH:.
$PATH取出当前环境变量的值
. 是当前路径
$PATH:.在$PATH环境变量的后边添加上当前路径。
PATH=$PATH:. 在$PATH环境变量的后边添加上当前路径。
然后更新PATH的值。
export 导出的意思,就是将后边的变量导出为环境变量。
PS1="\W\$"
《鸟哥私房菜》
bash有外部命令和内部命令
跟bash独立的应用程序成为外部命令
命令如果是bash中的程序,称为内部命令
type command 用于察看命令的内部还是外部。
4.静态库的制作和使用
什么是库?什么是静态库?
函数的仓库,就称为函数库。函数库分为静态和动态两种
静态库,静态库中的函数,在编译阶段链接。称为静态库。
动态库,动态库中的函数,在程序执行的时候链接。成为动态库。
静态库的命名规则:
lib库名.a
创建静态库的步骤:
a) 先编译源文件为目标文件
tmath$gcc -c tmath.c
tmath$gcc -c process.c
b) 将目标文件打包到静态库文件
ar -r libtmath.a tmath.o process.o
tmath$ar -t libtmath.a 察看静态库里的文件
c)使用静态库编译链接文件,生成可执行文件
gcc test.o -L. -ltmath -o tt
-L路径 路径指定了到哪里去找库文件
-l库名 找仓库的名字
参见tmath文件夹,tmath.c
process.c
补充:
制作跟系统一样的库文件
第一步:将头文件移动到系统指定的路径下
/usr/include
第二步:将库文件移动到程序链接的时候,默认的路径下
/usr/lib
第三步:将程序和库文件链接
gcc test.c -ltmath -o tt
小结:
指针
GDB
环境变量
静态库的制作和使用。
5.动态库的制作和使用