1.静态库的制作和使用
1)静态库的后缀名为 .a
2)制作
制作过程如下:
1..首先使用gcc获得 .o 文件
gcc -c add.c div.c mult.c sub.c
2..之后使用 ar 工具将 .o 文件打包
ar rcs libcalc.a add.o div.o mult.o sub.o
以上的操作都是在另一个含有head.h的头文件的文件夹中完成的,因为这些.c文件中都含有head.h,所以必须要在同一文件夹中才能完成,这是我实操中所犯的错误
3..完成之后布局如上图所示,然后就可以直接编译了,只不过与正常的编译相比,我们需要帮助系统去找一些东西
使用命令如下:
gcc main.c -o main -I ./include -l ./calc -L ./lib
// -I是帮助系统找到头文件的路径
// -l是告诉系统静态库的名字
// -L是告诉系统静态库的路径
然后就能直接生成可执行文件,且直接能运行,静态库的制作大致就是这么多的内容
2.动态库的制作和使用
1)动态库本身就是可执行文件,文件后缀名未.so
2)动态库与静态库的不同点是,动态库需要得到和位置无关的代码,需要使用绝对路径来访问
3)制作
1..第一步同样是使用gcc获得 .o 文件,但因为要得到和位置无关的代码,所以我们需要多加一个参数
gcc -c -fpic/-fPIC add.c div.c mult.c sub.c
//这里的意思是fpic和fPIC中选一个即可
2..第二步是通过gcc得到动态库
gcc -shared add.o div.o mult.o sub.o -o libcalc.so
到这里动态库的制作已经完成了
4)使用 动态库的使用相当于是在静态库的使用上多加了一步
1..第一步 这一步与动态库的使用完全一致
gcc main.c -o main -I ./include -l ./calc -L ./lib
2..这样我们同样能得到编译后的文件,但此时,这个文件是不能运行的,运行会报错。
./main: error while loading shared libraries: libcalc.so: cannot open shared object file: No such file or directory
4)我们有好几种办法来解决这个问题
1..法1 直接在终端中配置环境变量
我们可以直接在终端中进行环境变量的配置
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/nowcoder/Linux/lesson06/library/lib
//后面冒号拼接的部分是动态库的绝对路径,可通过pwd命令访问到
但并不推荐这种方式,因为一旦终端关闭,环境就直接失效了,可使用2,3两种方法
2..法2 在nowcoder目录中找到隐藏文件.bashrc,用vim打开,将上面配置环境变量的命令加入保存退出之后,刷新一下即可
source .bashrc
//这是刷新代码
这种方法可实现永久配置
3..法三 系统级别配置环境
sudo vim /etc/profile
输入密码后同样将配置环境变量的命令加入然后刷新一下即可
source .bashrc
//这是刷新代码
4..法四 /etc/ld.so.cash文件列表
这个文件使用的是二进制编码,我们不能直接访问它,但可通过间接访问实现我们的目的
可通过间接访问 /etc/ld.so.conf
sudo vim /etc/ld.so.conf
这种方法我们只需要复制路径即可,不需要配置环境变量
同样我们仍然需要更新一下,更新代码如下:
sudo ldconfig