1、 链接文件
链接分为两种:
软连接:符号链接,相当于windos上的快捷方式,软链接文件存储文件路径,软链接和源文件使用不同的inode结点,创建软链接文件,ln -s 源文件 新的链接文件,eg ln -s mian.c test.c,test.c就是软链接。
硬链接:相当于源文件的别名,硬链接文件和源文件使用同一个inode。ln 源文件 链接文件。
ll -i 可以查看inode
(什么是inode结点)
Linux 文件系统:EXT4,是索引式文件系统,磁盘格式化时,将磁盘空间分为三部分。
inode(存文件属性信息,block编号)
block(存储文件真实内容)
superblock(存储整个文件系统的信息,包括inode的总量,使用量,剩余量)
U盘:FAT32,链接式文件系统
2、库文件
库文件是某些功能文件代码的集合。
静态库:在链接阶段直接将库中的内容,通过链接器合并到最终的可执行文件中,静态库生成的可执行文件最终执行时,并不依赖文件,是中间文件的集合。windows 上是.lib,Linux上是.a。
静态库的生成:eg:gcc -c test.c test.o , ar crv libxxxx.a test.o(命名lib开始,扩展名.a)
使用 :gcc -o test test.c -L(路径) -l(库名称只有xxxx)
或者:gcc -o 路径/libxxxx.a
静态库里面不能有main函数
动态库:(共享库)链接阶段只在可执行文件中知道使用的哪个库,运行时由操作系统加载到内存上。是不可单独执行的可执行文件。动态库单独存在磁盘上,执行时将动态库加载到内存上。windows 上是.dll,Linux上是.so
动态库的生成:eg:gcc -shared -fPIC -o libxxxx.so test.c(命名lib开始,扩展名.so)
使用 :gcc -o test test.c -L(路径) -l(库名称只有xxxx)
或者:gcc -o 路径/libxxxx.a
操作系统加载动态库路径:/lib和/usr/lib
1、将动态库拷贝到/lib或者/usr/lib,只有root有权限
2、设置环境变量,使操作系统加载库时除了默认路径下搜索,还需要到用户指定的路径下搜索。
export LD_LIBRARY_PATH=绝对路径
export LD_LIBRARY_PATH=/home/stu/lib,仅仅对当前终端有效
可修改配置文件永久有效。/home/user/.bashrc
注* 怎么知道程序用了哪些库 ldd poll