find 目录 参数 名称
find ./ -name "progremer"
find ./ -type f
find ./ -type d
find ./ -ctime +1
find ./ -mtime +1
find ./ -atime -1
find ./ -maxdepth 3 -name "progremer"
find ./ -mindepth 3
find ./ -type d -exec shell 命令 {} ;
如 find ./ -type d -exec ls -l {} ;
find ./ -type d -ok ls -l {} ;
find ./ -type d | xargs ls -l
根据文件内容查找:
grep -r "查找的内容" 搜索的路径
grep -r "stdio.h" ~
grep -r "stdio.h" ~ -n 行号
gcc
gcc 文件.c -o 目标文件名 直接由.c文件编译成可执行文件;
gcc 文件.c -I 头文件目录 -o 目标文件名 编译时,指定头文件位置;
gcc 文件.c -c -I 头文件目录 由.c文件转成二进制.o文件。
gcc 文件.c -I 头文件目录 -D 宏文件(DEBUG) -o 目标文件名;
gcc 文件.c -I 头文件目录 -D 宏文件(DEBUG) -o 目标文件名 -Wall;显示编译警告;
gcc分步编译过程:
gcc -E 源文件(.c文件)-o 目标文件(.i) 预处理 c文件
gcc -S 源文件(.i文件)-o 目标文件(.s文件)经编译器编译,变成 汇编文件
gcc -c 源文件 (.s文件)-o 目标文件(.o文件)。经汇编器汇编,成为 二进制文件
gcc 源文件 (.o文件)-o 目标文件。 经链接器链接,成为可执行文件
静态库文件名规则:lib+自定义库名+.a
静态库制作步骤:
将.c生成.o文件
gcc 文件.c -c
将.o打包
ar rcs 静态库的名字 原材料;如ar rcs libtest.a a.o b.o;
静态库的使用:
gcc 文件.c -I 头文件目录 -L ./lib/(静态库目录) -lmycalc(libmycalc.a)库名 -o app
-L指定库的路径;
-l指定库的名字取得lib和.a;
-I 头文件目录;
动态库命名规则:lib+自定义库名+.so
动态库的制作:
将源文件生成.o
gcc a.c b.c -c fpic(fPIC)
打包
gcc -shared a.o b.o -o libxxxx.so
动态库的使用
头文件a.h
动态库 libtest.so
参考函数声明编写测试程序main.c
gcc main.c -I ./ -L ./ -l test -o app
note:
ldd app(可执行文件) 可查看当前所运行的可执行文件的依附文件是否可找到;
file app(文件名)查看文件类型
nm 文件名 查看.o二进制文件内函数;
对于ELF格式的可执行程序,是由Id-linux.so*来完成的,它先后搜索ELF文件的
DT_RPATH 段
-----环境变量 LD_LIBRARY_PATH
-----/etc/Id.so.cache 文件列表
-----/lib ----------/usr/lib目录
找到文件后,将其载入内存。
动态库无法加载
使用环境变量:
(1)临时设置:
在终端 LD_LIBRARY_PATH=动态库路径(终端页面内有效)
(2)永久设置
用户级别:~/.bashrc
#export LD_LIBRARY_PATH = 动态库路径
配置完成后,重启终端(只有在终端打开的时候,才会读~/.bashrc文件)或source ~/.bashrc
系统级别:/etc/profile
export LD_LIBRARY_PATH = 动态库路径:$LD_LIBRARY_PATH
配置完成后,重启终端(只有在终端打开的时候,才会读/etc/profile文件)或source /etc/profile
对所有用户生效。