库:库是二进制文件,是源代码文件的另一种表现形式,是加了密的源代码;是一些功能相近或者相似函数的集合体
库的使用:
头文件--包含了库函数的声明
库文件--包含了库函数的代码实现
注意:库不能单独使用,只能作为其他执行程序的一部分完成某些功能,也就是说只能被其他程序调用才能实现
库分为静态库和共享库
静态库:
静态库是一些目标代码的集合,是在可执行程序运行前就已经加入到执行码中,成为执行程序的一部分。以.a为文件后缀名。
命名:
前缀:lib 库名称:自定义 后缀:.a
静态库的制作:
1 把.c文件编写成.o文件
gcc -c t1.c t2.c
2使用ar 命令将.o文件打包成.a文件
ar rcs libx.a(库名字) t1.o t2.o
静态库的使用:
gcc -o m m.c -I/.(头文件所在目录) -L./(库文件所在目录) -lxt(l+库文件名)
如图:
t.h头文件内容:
这是t1.c t2.c 内容:
这是m.c文件:
执行者两步制作库:
使用:
动态库:
动态库在程序编译时并不会被连接到目标代码中,而是程序运行时才被载入。
命名:
lib+名字+.so
动态库的制作:
1 把.c文件编写成.o文件
gcc -fpic -c t1.c t2.c
2将.o文件打包成.so文件
gcc -shared t1.o t2.o -o libx.so
动态库的使用:
gcc -o m m.c -I/.(头文件所在目录) -L./(库文件所在目录) -lxt(l+库文件名)
注意:1:动态库文件在编译的时候,连接器需要使用参数-L找到库文件所在路径
2:在执行的时候,是加载器ldd根据动态库的路径进行加载的,与编译的时候使用的-L指定的路径无关。
cannot open shared object file: No such file or directory报错:
当我们使用我们制作的动态库时会报以上错误
我们用命令 ldd
解决一:输入: sudo cp libx.so /usr/lib
解决二:在家目录下创建一个lib目录,然后用 cp libx.so ~/lib 把文件拷贝到lib里去
然后打开.bashrc添加export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/lib
打开终端输入: . ~/.bashrc 就可以使用了