方法1 [ 推荐使用 ]: 系统虽然不知道我们自己的库在哪里, 但是它有一些默认路径(在环境变量中预先写好的路径) 。因此我们可以把自己的动态库文件放到系统默认的路径下即可 (/usr/lib 或者 /lib )
假设我们的文件结构为下图所示,我们需要把sum.c和max.c 封装成动态库
3.1 .o文件生成
输入以下命令,用max.c和sum.c文件生成为max.o和sum.o文件
gcc max.c -o max.o -c -fPIC -I../inc
gcc sum.c -o sum.o -c -fPIC -I../inc
3.2 .动态库生成
用.o文件生成动态库
gcc -shared -fPIC -o libmy_lib.so *.o
我们把libmy_lib.so移动到lib目录下,也把.o和.c文件删除掉(这里的main.c中包含主函数main(),所以main.c不能被制作为动态或者静态库,同时也不能删除主函数,删除了程序就跑不了)删减后如下图:
3.3 动态链接
gcc src/*c -I./inc -L./lib -lmy_lib -o bin/main
这里表示我们已经在bin/main,生成可以运行的main文件,但是为什么运行不了,如下图报错
就是因为:没有给自己的动态库文件方到系统默认的路径下即可 (/usr/lib 或者 /lib )
使用sudo进入管理员模式,添加到系统默认路径后输入密码
sudo cp lib/libmy_lib.so /usr/lib/
在根目录usr/lib中可以看见我们生成的动态库
3.4 正常运行
运行我们在bin目录中的main文件,如下图,正常运行
注意:想要删除根目录/usr/lib中我们自己配置的文件,输入以下命令(使用sudo)
sudo rm libmy_lib.so