C中的动态库与静态库

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

一、介绍

1、静态库

静态链接库实现链接操作的方式很简单即程序文件中哪里用到了库文件中的功能模块GCC 编译器就会将该模板代码直接复制到程序文件的适当位置最终生成可执行文件。

使用静态链接库生成的文件通常体积较大但运行时不再依赖库文件可以拷贝到别的设备上运行。

在Linux中静态链接库文件的后缀名通常用.a表示在Windows系统中静态链接库文件的后缀名为.lib。

2、动态库

动态链接库又称为共享链接库。和静态链接库不同采用动态链接库实现链接操作时程序文件中哪里需要库文件的功能模块GCC 编译器不会直接将该功能模块的代码拷贝到文件中而是将功能模块的位置信息记录到文件中直接生成可执行文件。

使用动态链接库生成的文件通常体积较小运行时依赖库文件

在Linux中动态链接库的后缀名通常用.so 表示在Windows系统中动态链接库的后缀名为.dll。

二、操作

1、使用静态库

通常情况下GCC在编译过程中默认使用动态链接库我们可以使用 -static 选项指定使用静态链接库。

2、生成库

静态链接库和动态链接库我们也可以自己制作只要是不包含 main 函数的文件都可以打包成库文件。可以一个文件打包成一个库文件也可以将多个文件打包成一个库文件。

需要注意库名格式为libxxx.a 和 libxxx.so

ar rcs 静态链接库名称 目标文件1 目标文件2 ...
gcc -fpic -shared 源文件名... -o 动态链接库名出错可以将 -fpic 换位 -fPIC

3、使用动态库

在Linux 中动态库的搜索路径除了默认的搜索路径外/lib 或者 /usr/lib还可通过三种方法来指定

方法一在配置文件 /etc/ld.so.conf 中指定动态库搜索路径

ld.so.conf 文件中的内容为 include ld.so.conf.d/*.conf

所以可以在 ld.so.conf.d 文件夹下创建我们自己的配置文件并将需要搜索的动态库路径添加进去。

添加完后需要使用 ldconfig 刷新缓存。

方法二通过环境变量 LD_LIBRARY_PATH 指定动态库搜索路径临时的只在当前shell下生效

SHELL_FOLDER=$(cd "$(dirname "$0")";pwd)
# 添加依赖搜索路径
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${SHELL_FOLDER}/lib/log/linux_x64

方法三在编译目标代码时指定该程序的动态库搜索路径。

g++ -Wl,-rpath=/usr/local/lib/ -oevh libevent_http.cpp -levent

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6