静态库和动态库

库是已经写好的,成熟的,可复用的代码。库可以看作一组目标文件的集合,将这些目标文件经过压缩打包之后形成的文件。

静态库

在程序的链接阶段被复制到程序中。

制作步骤

  1. 编译为目标文件(.o)
  2. 把相关的.o文件打包:ar rcs libname.a file.o…
  3. 将头文件和库一起发布

缺点:执行程序时体积较大。库变更的时候需要重新编译应用

动态库

在程序运行时加载。

制作步骤

  1. 编译与位置无关的目标文件,加参数 -fPIC
  2. 把相关的.o文件打包 g++ -shared -o libname *.o
  3. 将头文件和库一起发布

解决不能加载自定义动态库的问题

  1. 将库路径增加到环境变量LD_LIBRARY_PATH中
  2. 配置/etc/ld.so.conf文件,增加自定义库文件夹所在路径,执行sudo ldconfig -v

优点:如果输出接口不变,库变更的时候不需要重新编译应用

缺点:执行时需要加载动态库,相比而言,比静态库慢。发布应用时需要同时发布动态库。

链接

静态链接:找到静态库,拷贝静态库中所需要的代码到可执行程序中。

动态链接:找到动态库,拷贝动态库中所需要的代码的地址到可执行程序相关的位置

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top