gcc/g++的动态库和静态制作和使用

一、静态库制作

1.gcc获取.o文件

gcc -c xxx.c -o xxx.o//获取.o文件

2.使用ar工具(archive)将.o文件打包

在Windows上,静态库文件扩展名为libxxx.lib;在Linux上,扩展名是libxxx.a。(只有xxx是可以自己更改的,其他的都是固定的)

ar rcs libxxx.lib xxx.o xxx.o//这是Windows,r是将文件插入备存文件中,c是建立备存文件,s是索引
ar rcs libxxx.a xxx.o xxx.o //同上,这是Linux

3.静态库的使用 

gcc main.c -o main -I 头文件路径 -l 所使用库文件名称 -L 所使用的库文件路径

 这里所使用的库文件名称是不包括前缀lib和后缀.a(Linux系统上)或.lib(windows系统上)

二、动态库制作

1.gcc获取.o文件,得到和位置无关的代码

得到与位置无关的代码的好处:可以在任何地址空间加载并执行,而不需要固定的加载地址(可重用性)。可以在多个进程之间共享(可共享性)。可以在不同的系统和架构上加载和执行(可兼容性)。

gcc -c -fpic/-fPIC xxx.c xxx.c

 2.gcc得到动态库

gcc -shared xxx.o xxx.o -o libxxx.dll//Windows
gcc -shared xxx.o xxx.o -o libxxx.so//Linux

程序启动,需要把动态库加载到内存中,Linux系统可以通过ldd指令还检查动态库依赖关系。

 3.动态库的使用

 动态库和静态库的使用一样,同时这里需要注意的事项也和上面的静态库一样。

gcc main.c -o main -I 头文件路径 -l 所使用库文件名称 -L 所使用的库文件路径

 三、Linux系统上解决动态加入失败问题的方法

检查内存动态库指令 ecLD_LIBRARY_PATH 

方法一: 直接使用命令加入内存

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:再加上动态库地址

但是这个指令在系统重启后内存中就没有了,需要再手动加入内存。 

方法二:更改.bashrc文件

vim .bashrc//打开bashrc在文件最后添加方法一的指令,最后使用下面指令更新库
source ~/.bashrc
. ~/.bashrc

方法三:修改/etc/ld.so.conf文件

sudo vim /etc/ld.so.conf

把动态库地址写入这个文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值