加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱制作网_池州站长网 (https://www.0566zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

C++之动态库与静态库的制作与使用

发布时间:2022-11-22 11:08:44 所属栏目:Linux 来源:
导读:  (本文是作者在牛客网上c++高并发服务器课程的学习整理)

  1. 静态库

  命名规则

  Linux:libxxx.a,lib固定前缀,xxx库名字,a固定后缀

  Windows: libxxx.lib

  静态库的制作与
  (本文是作者在牛客网上c++高并发服务器课程的学习整理)
 
  1. 静态库
 
  命名规则
 
  Linux:libxxx.a,lib固定前缀,xxx库名字,a固定后缀
 
  Windows: libxxx.lib
 
  静态库的制作与使用
 
  制作
 
  gcc -c test.c//test.c为需要打包成库的文件,此行生成test.o文件
  ar rcs libtest.a test.o // 此行用ar工具将.o文件打包
  // r-将文件插入备存文件
  // c-建立备存文件
  // s-索引
  使用
 
  gcc main.c -o main -I "head file path" -L "库文件path" -l "库名字(libtest.a中的test)"
  ./main
  2. 动态库
 
  命名规则
 
  Linux:libxxx.so,lib固定前缀linux动态库,xxx库名字,so固定后缀
 
  Windows: libxxx.dll
 
  动态库的制作与使用
 
  制作
 
  gcc -c -fpic test.c //test.c为需要打包成库的文件,此行生成.o文件
  // -fpic或者-fPIC,得到与位置无关的代码(动态库特点)
  gcc -shared test.o libtest.so // 此行将.o文件打包,得到动态库
  使用
 
  程序启动之后,动态库会被动态加载到内存中,需要系统的动态载入器来获取该绝对路径。对于elf格式的可执行程序,是由ld-linux.so完成,先后搜索elf文件的以下:
 
  DT_RPATH段环境变量LD_LIBRARY_PATH
 
  // 法一:用户级别
  vim ~/.bashrc
  // 在.bashrc文件末尾插入下行,保存并退出
  export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"库文件目录"
  //更新一下
  source ~/.bashrc
  //使用
  gcc main.c -o main -I "head file path"
  ./main
  // 法二:系统级别
  sudo vim /etc/profile
  // 在profile文件末尾插入下行,保存并退出
  export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"库文件目录"
  //更新一下
  source /etc/profile
  // 使用
  gcc main.c -o main -I "head file path"
  ./main
  /etc/ld.so.cache文件列表
 
  sudo vim /etc/ld.so.config
  // 在文件末尾插入下行,保存并退出
  export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"库文件目录"
  //更新一下
  sudo ldconfig
  // 使用
  gcc main.c -o main -I "head file path"
  ./main
  /lib/, /usr/lib目录
 
  将库文件放入/lib/,/usr/lib里面,但是不推荐这种方式,因为这两个文件夹里本来库文件就很多,可能会重名覆盖。
 
  可以通过 ldd main命令检查动态库依赖关系
 
  3. 静态库与动态库的差异
 
  区别:链接阶段的处理不同,分别成为静态链接方式和动态链接方式。(库很小用静态,库很大用动态)。
 
  静态库:GCC进行链接时,会把静态库中代码打包到可执行程序中。
 
  动态库:GCC进行链接时,动态库的代码不会被打包到可执行程序中。
 

(编辑:我爱制作网_池州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!