欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux下静态库、动态库的创建和使用

程序员文章站 2022-07-14 09:31:49
...

静态库、动态库的创建和使用
1.按照如下目录,建立如下文件
Linux下静态库、动态库的创建和使用

Linux下静态库、动态库的创建和使用

Linux下静态库、动态库的创建和使用

Linux下静态库、动态库的创建和使用

Linux下静态库、动态库的创建和使用

Linux下静态库、动态库的创建和使用

Linux下静态库、动态库的创建和使用

2.创建静态库
Linux下静态库、动态库的创建和使用
创建lib文件夹,用来存放库文件
Linux下静态库、动态库的创建和使用
Linux下静态库、动态库的创建和使用

Linux下静态库、动态库的创建和使用

编译连接,生成可执行程序:

Linux下静态库、动态库的创建和使用
显示目录和文件:
Linux下静态库、动态库的创建和使用
静态库:app放到哪里都可以运行,因为静态库已经编译到app中,也导致其代码体积庞大
动态库:运行的电脑需要有动态库,且版本号要一致,但是其代码体积小。

  1. 创建动态库(共享库)

Linux下静态库、动态库的创建和使用

gcc -shared -Wl,-soname,libmycal.so.1 -o libmycal.so.1.0.1 a.o b.o

按照共享库的命名惯例,每个共享库有三个文件名:real name、soname和linker name。
真正的库文件(而不是符号链接)的名字是real name,包含完整的共享库版本号。

soname是一个符号链接的名字,只包含共享库的主版本号,主版本号一致即可保证库函数的接口一致,因此应用程序的.dynamic段只记录共享库的soname,只要soname一致,这个共享库就可以用。如libmyab.so.1和libmyab.so.2是两个主版本号不同的libmyab,有些应用程序依赖于libmyab.so.1,有些应用程序依赖于libmyab.so.2,但对于依赖libmyab.so.1的应用程序来说,真正的库文件不管是libmyab.so.1.10还是libmyab.so.1.11都可以用,所以使用共享库可以很方便地升级库文件而不需要重新编译应用程序,这是静态库所没有的优点。注意libc的版本编号有一点特殊,libc-2.8.90.so的主版本号是6而不是2或2.8。

linker name仅在编译链接时使用,gcc的-L选项应该指定linker name所在的目录。有的linker name是库文件的一个符号链接,有的linker name是一段链接脚本。例如上面的libc.so就是一个linker name,它是一段链接脚本.

Linux下静态库、动态库的创建和使用

此时找不到动态库
Linux下静态库、动态库的创建和使用

a.需要设置共享库的加载路径:
Linux下静态库、动态库的创建和使用
b.打开后添加最后一行:
Linux下静态库、动态库的创建和使用
c.更新共享库加载路径:
Linux下静态库、动态库的创建和使用
查看:
Linux下静态库、动态库的创建和使用

再次编译连接:
Linux下静态库、动态库的创建和使用
可以手动添加link name:
Linux下静态库、动态库的创建和使用

Linux下静态库、动态库的创建和使用

执行程序:
Linux下静态库、动态库的创建和使用

相关标签: 共享库 静态库