库
预先编译好的方法的集合
静态库 libxx.a
ar crv libfoo.a add.o max.o
gcc -o main main.c -L路径 -l库名
会把方法包含到可执行程序中 删掉库没问题
使用静态库的可执行程序,会包含用到库的方法,目标主机上即使没有该库,程序也能运行
共享库 libxx.so
gcc -shared -fPIC -o libfoo.so add.o max.o
cp libxx.so /usr/lib 管理员 运行
共享库 删掉之后 程序不能用了
使用共享库的可执行程序,不会包含用到的方法,仅仅标记,目标主机没有该库,程序无法运行。
LD_LIBARY_PATH .(点 当前目录)
export LD_LIBARY_PATH
在当前找 换一个终端后失效(bash中定义)
同上
etc id.lib.conf该库路径
错误
汇编时候 链接错误 找不到方法的实现
编译时错误 语法错误
ldd
可执行文件用到了什么库
运行时不占磁盘空间占内存空间
程序计数器 自加 程序由指令构成
系统/控制/数据/地址总线
操作系统 管理计算机的软硬件设备 为用户提供一个交互的接口 管理内存 文件系统 进程
进程 一个正在进行的程序 就绪 阻塞 运行
PCB 进程控制块
串行处理 一个一个 处理任务
批处理 一次提交多个任务 按顺序执行 (减少任务之间的耽误的时间)
多道程序设计 避免阻塞带来的时延
分时系统 同时执行多个任务(时间片轮转 )
实时系统
引入虚拟内存可以运行比物理内存大的程序
磁盘 -内存- 缓存- 寄存器 cpu
printf-》libc.so.6
缓冲区 charbuff
缓冲区刷新到屏幕 不满足则不刷新 屏幕
1.缓冲区满了
2.强制刷新\n
3.fflush(std::out)
4.程序结束
exit 冲刷缓冲区后调用 _exit退出程序(_exit不刷新缓冲区)
int main(int argc,char +argv[],char * envp[])
参数个数
参数内容
环境变量
动态库更改~环境变量 然后envp【】就可以找到