Linux环境混合使用静态库与动态库

简介: Linux环境混合使用静态库与动态库

目前 静态库 跟 动态库 编译,使用的方法都讲了一遍。但是在实际工程项目里面,可能会遇到一些第三方提供的动态库,跟一些第四方提供的静态库。

这些库都需要链接进去你自身的项目进行调用,本文主要讲解混合调用的方式。

还是以之前的例子为基础,libstar.so 动态库已经编译好,并且放置在 /usr/local/star/lib 目录下。现在来了一个新的大佬 theseus (波塞冬的儿子忒修斯)。

忒修斯 不但可以操作 3 颗星球,还会做饭。所以我们需要封装一个 libcook.a 静态库给 忒修斯 调用,完整的项目下载,theseus ,提取码:3yil

下载完成 theseus 项目之后,请放置到 Document 项目,如下图:

开始执行以下命令开始编译:

cd ~/Documents/theseus/libcook
gcc -c -o chicken.o chicken.c
gcc -c -o fish.o fish.c
gcc -c -o noodle.o noodle.c
ar -rcs libcook.a noodle.o fish.o chicken.o
# 把 libcook.a 移动到 /usr/lib
sudo mv libcook.a /usr/lib

继续编译:

cd ~/Documents/theseus
gcc -c -o theseus.o theseus.c
gcc -o theseus theseus.o -Wl,-Bstatic -lcook -Wl,-Bdynamic -lstar -L/usr/local/star/lib

运行结果如下:

这样 libstar 就是动态链接,而 libcook 就是静态链接。


提示,其实很少情况会 静态库动态库混合使用,如果用静态库,大部分场景是为了兼容性,所有的库都是静态链接,包括 libc 库,这样生成的二进制文件就什么动态库都不依赖,很方便使用。

再说一个例子,例如 A 库依赖 B库, C 库也依赖 B库。如果 A 库是静态链接,那 B 库可以是静态链接或者动态库链接。

B 库不能同时静态 跟 动态链接进去二进制文件,会冲突。

记得,链接操作只发生在链接阶段,不是编译阶段。所以 A 库可以是静态链接,但是 B 库是动态链接。

目录
相关文章
|
6月前
|
存储 Linux 开发工具
Linux环境下使用Buildroot配置软件包
使用Buildroot可以大大简化嵌入式Linux系统的开发和维护工作,但它需要对Linux系统和交叉编译有深入的理解。通过上述步骤,可以有效地配置和定制软件包,为特定的嵌入式应用构建高效、稳定的系统。
769 11
|
8月前
|
存储 监控 Linux
Linux环境锁定关键文件防止误删操作流程。
总结以上内容,在Linux环境下锁定重要文档避免误删涉及到多种技术手段与策略组合运作, 包括但不限于利用chatter指挥官固化文档状态至只读模式、运作ACL精准调整访问权利列表、编排自动化流程简
430 20
|
8月前
|
Linux
Linux环境下的UDEV机制及其与守护进程的关联
实际使用时管理员需要熟悉编写合适udev rules去满足特殊需求;同时也需要注意避免编写过度复杂导致无法预料结果rules.UDEVD虽然稳健但错误配置可能导致无法预料问题因此需谨慎处理相关配置工作.
323 16
|
Linux 编译器 Shell
深入理解Linux中的动态库与静态库
深入理解Linux中的动态库与静态库
|
存储 Linux 编译器
【探索Linux】P.13(文件系统 | 软硬链接 | 动态库和静态库)
【探索Linux】P.13(文件系统 | 软硬链接 | 动态库和静态库)
197 0
|
Linux C语言
【Linux】C语言动态库和静态库的制作和使用
【Linux】C语言动态库和静态库的制作和使用
274 0
|
Linux 编译器 vr&ar
【Linux】—— 详解动态库和静态库
【Linux】—— 详解动态库和静态库
826 0
|
自然语言处理 Linux 编译器
【Linux学习】动态库和静态库
【Linux学习】动态库和静态库
330 1
|
编译器 Linux 程序员
【Linux:动态库与静态库】
【Linux:动态库与静态库】
485 0
下一篇
开通oss服务