静态库与动态库

简介: 静态库与动态库

静态库与动态库区别

  • 怎么生成静态库?
  • 怎么生成动态库?
  • 怎么利用动态库或静态库生成可执行文件?Linux 与 Windows 文件格式分别是?
  • 为什么利用静态库生成的可执行文件比利用动态库生成的可执行文件大?
  • 怎么指定动态库生成可执行文件?

准备代码:

// add.cpp
#include "api.h"
int add(int a, int b) {
    return a + b;
}
//api.h
#pragma once
int add(int a, int b);
int del(int a, int b);
//del.cpp
#pragma once
int add(int a, int b);
int del(int a, int b);

静态库

  • Linux中.a 文件是静态文件相当于Windows下.lib文件。
  • 静态链接 的方式会将静态库编译进具体的可执行程序,如将libapi.a编译进static_mian可执行程序中。导致可执行程序static_miandynamic_main大许多。
$ g++ -c add.cpp -o add.o  #生成目标文件
$ g++ -c del.cpp -o del.0
$ ar rcs libapi.a del.o add.o  #生成静态库文件
#依赖静态库生成可执行文件static_main
$ g++ -static main.cpp -o static_main -L./ -lapi -I./

代码运行结果:
add(1,2) = 3
del(1,2) = -1

动态库

Linux中.so 文件是动态文件相当于Windows下.DLL文件。

g++ -shared -fPIC -o libapi.so del.o add.o  #生成libapi.so动态库
#依赖动态链接库生成可执行文件
g++ main.cpp -o dynamic_main -L./ -lapi -I./ 

代码运行结果:
./dynamic_main: error while loading shared libraries: libapi.so: cannot open shared object file: No such file or directory

继续分析

  • 为什么会报错?
    答:动态库需要指定搜索路径,这个路径在一个宏定义当中,默认会在/lib/usr/lib路径中查找。显然我们得动态库并没有在前面所述的默认路径下,所以我们要将指定该动态库路径。
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/guoqiang/share/test
执行./dynamic_main 就成功了:
add(1,2) = 3
del(1,2) = -1

充电站

推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习

相关文章
|
4月前
|
Linux Windows
静态库和动态库
本文详细介绍了静态库和动态库的概念及使用方法。在 Linux 系统中,静态库以 `libxxx.a` 形式存在,而动态库则为 `libxxx.so`。文章分别讲解了如何创建和使用这两种库,并提供了具体的命令示例。此外,还介绍了将库文件添加到系统目录的方法,包括直接复制到默认库路径、修改环境变量以及编辑系统配置文件等方案。适合初学者了解库文件的基本操作。
|
8月前
|
Linux 编译器 开发者
C/C++动态库与静态库 的详细解析
C/C++动态库与静态库 的详细解析
791 0
vs2019使用静态库
vs2019使用静态库
336 0
|
存储 Cloud Native Linux
C++ 动态库与静态库的区别?
C++ 动态库与静态库的区别?
|
存储 Linux 编译器
什么是链接库 | 动态库与静态库
什么是链接库 | 动态库与静态库
219 0
|
Shell 开发工具 iOS开发
动态库下(5)
动态库下(5)
386 0
动态库下(5)
|
Shell 开发工具 C语言
动态库与静态库
本文目标:⭐认识动态静态库,学会结合gcc选项,制作动静态库⭐⭐了解动态库加载过程⭐。
动态库与静态库
|
vr&ar C语言 索引
静态链接和静态库
静态链接和静态库
193 0
vs2019使用动态库
vs2019使用动态库
227 0
1.4~1.9 静态库和动态库
1.4~1.9 静态库和动态库
164 0
1.4~1.9 静态库和动态库