Linux笔记之动态库

动态库
动态链接库是程序运行时加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序。动态链接库是目标文件的集合。
动态链接库的名称有别名,真名和链接名。别名由一个前缀lib,然后是库的名字,再加上一个后缀“.so”构成。真名是动态链接库的真实名称,一般总是在别名的基础上加上一个小版本号。除此之外,还有一个链接名,即程序链接时使用的库的名字。
1.生成动态链接库
操作和上面的静态库的前两步骤是一致的
步骤五:由.o文件创建动态库文件
生成动态链接库的命令很简单,使用-fPIC选项或者-fpic选项,动态库文件名命名规范和静态库文件名命名规范类似,也是在动态库名增加前缀lib,但其文件扩展名为.so,我们创建的动态库名为libmyhello.so,则动态库文件名就是libmyhello.so,用gcc来创建动态库。
gcc -fpic -c hello.c
ls
hello.c hello.h hello.o main.c
gcc -shared -fpic -o libmuhello.so hello.o
ls
Hello.c hello.h hello.o libmyhello.so main.c
或者
gcc -shared -fPIC -o libmyhello.so hello.c
ls
hello.c hello.h libmyhello.so main.c
步骤六:在程序中使用动态库
在程序中使用动态库和静态库完全一样,也是在使用到这些公用函数的源程序中包含这些公用函数的原型声明,然后在用gcc命令生成目标文件时指明动态库名进行编译。先运行gcc命令生成目标文件,再运行看看结果
gcc -o hello main.c libmyhello.so
./hello
./hello: error while loading shared libraries: libmyhello.so: cannot open shared object file: No such file or directory
会出错,是因为找不到动态库文件libmyhello.so,程序在运行时,会在/usr/lib和/lib等目录中查找需要的动态库文件。若找到,则载入动态库,否则将提示错误而终止程序运行我们将文件libmyhello.so复制到/usr/lib中。
mv libmyhello.so/usr/lib
./hello
Hello everyone!
说明了动态库在程序运行时是需要的。

当静态库和动态库同名时,gcc命令优先使用动态库

猜你喜欢

转载自blog.csdn.net/weixin_44545549/article/details/103211451
今日推荐