网游活动情报网 - 新服预约与福利指南

动态库的制作与链接详解

方法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