文章目录
- 动静态库
- 动态库
- 静态库
- 动静态链接
动静态库
库 | Linux | Windows |
---|---|---|
动态库 | .so | .dll |
静态库 | .a | .lib |
动静态库的本质就是文件。
lld
ldd命令可以查看一个可执行程序所依赖的库文件
ldd code
:查看code依赖的库文件
平台要支持开发,必须要提前在系统中安装,语言的标准头文件+库文件。
C语言标准库
C语言静态库
动态库
动态库是被所有人共享使用的,一旦缺失,依赖这个动态库的所有程序都不可以运行。
- 动态库,在编译链接时不需要把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库。这样可以节省系统的开销。
- 动态库,一般后缀名为
.so
。 - gcc在编译时默认使用动态库。
动态库优点
- 节省资源,不会出现太多的重复资源。资源包括磁盘、内存、网络等资源
动态库缺点
- 对库的依赖性较强,如果库丢失,则所有使用这个库的程序都无法运行。
- 相较于静态库会有略微的性能问题,调用动态库会存在跳转调用的问题。
静态库
- 静态库是指在编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时就不再需要库文件。
- 静态库,一般后缀名为
.a
静态库安装
默认是不安装静态库,只默认安装动态库
yum install -y glibc-static libstdc++-static
centos7使用yum安装C/C++静态库的方式
出现下面这种情况,代表安装成功:
静态库优点:
- 不依赖库,可执行程序在同类型的平台中都可以直接运行
静态库缺点
- 可执行程序体积比较大,比较浪费资源。资源包括:磁盘、内存、网络等资源。
动静态库的区别:静态库在链接时需要拷贝到源文件中,动态库不需要。
允许你拷贝的库就是静态库,允许你关联的库就是动态库。
动静态链接
动态链接必须存在动态库,静态链接必须存在静态库。
- gcc默认是使用动态链接的。
动态链接
gcc -o mybin test.c
使用test.c形成mybin可执行文件的时候,默认使用动态链接
静态链接
gcc -o mybin-static test.c -static
使用test.c形成mybin-static可执行文件的时候,使用静态链接
查看可执行程序的动静态库详情
file a.out
使用file命令查看可执行程序a.out的动静态库详情