-
access : 文件最近被访间的时间,我们发现实际操作下来,文件时间貌似没有变化(在较新Linux 内核中,Access时间不会被立即更新,而是有一定的时间间隔,0S才会自动进行更新时间) -
modify : 最近一次修改文件内容的时间(当修改内容的时候,有可能修改了文件的属性(比如文件大小)) -
change : 最近一次修改文件属性的时间(修改文件权限等)
一、库
库文件都是二进制
那如何知道库里面有什么?通过:
动态库文件一般用.so结尾
静态库.a结尾
libxxx.so / libyyy.a-……
去掉lib和后缀.so/.a……之后剩下就是库名称
1. 查看依赖的库
ldd
2. 静态库
gcc -o xx xx -static
静态库是将.o文件打包成一个文件
libmymath.a:add.o
ar -rc $@ $^
%.o:%.c
gcc -c $<
.PHONY:clean
clean:
rm -rf add.o libmymath.a
.PHONY:output
output:
mkdir output
cp -rf add.h output
cp -rf libmymath.a output
ar -tv xx.a
%.c是GUNmake语法层,表示的是所有以".c"结尾的文件 而*.c则是linux shell 语法层的,比如:rm -f *.o 类似的。 意思基本是一样的,就是一个是GUNmake的一个是shell的
gcc 编译的文件 -I需要头文件的目录 -L静态库的目录 -l静态库名称(去掉前缀,去掉后缀的名字)
gcc test.c -I./output -L./output -lmymath
之前的库,在系统的默认路径下: /lib64, /usr/lib, /usr/include等编译器是能识别这些路径的 如果我不想带这些选项,可以把对应的库和头文件拷贝到默认路径下,但不推荐 上面的过程,也就是一般软件的安装过程!
3. 动态库
动态库可移植性差,体积小,如果库丢失,程序跑不了
- shared: 表示生成共享库格式
- fPIC:产生位置无关码(position independent code)
libmymath.so:add.o
gcc -shared -o $@ $^
add.o:add.c
gcc -fPIC -c -o $@ $^
.PHONY:clean
clean:
rm -f add.o libmymath.so
.PHONY:output
output:
mkdir output
cp add.h output
cp libmymath.so output
这里的动态库除了像静态库一样指明文件路径,以外,还要将其文件的环境变量添加到系统里,才能链接起来,而静态库是直接复制到文件里不需要找地址
gcc test.c -I./output -L./output -lmymath
export LD_LIBRARY_PATH=/home/rinne/class-practice/dynamic/output
4. 添加路径到系统
在这个目录下touch一个.conf文件,再把目录复制进去
cd /etc/ld.so.conf.d/
|