当前位置: 代码迷 >> 综合 >> day02-UC-静态库
  详细解决方案

day02-UC-静态库

热度:44   发布时间:2023-12-17 15:10:42.0

回顾昨天内容:

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.动态库的制作和使用