动态库和静态库制作

制作静态库

  1. 准备.o文件 gcc -c .c .o 文件名和函数名一致

  2. ar rcs libname.a file1.o file2.o … 静态库名字以lib开头,以.a结尾

  3. gcc test.c libmymath.a -o test 此时由于隐式声明会出现警告但无伤大雅(二饼脸)

  4. 关于隐式声明可以将库中的函数声明写在文件里但是过于繁琐,因此使用头文件方式加载静态库

  5. 将静态库和头文件分别放到其它目录下,头文件放在inc目录下, 库放在lib目录下

  6. 执行gcc test.c ./lib/libmymath.a -o test -I ./inc (-I指明头文件目录路径)

制作动态库

动态库里的函数用@plt标识,当动态库加载到内存时,再用加载进去的地址将@plt替换掉。

1. 生成与位置无关的.o文件

   gcc -c add.c -o add.o -fPIC 使用该参数,生成的函数和位置无关,等待动态绑定。

2. 使用 gcc -shard 制作动态库

  gcc -shared -o lib库名.so add.o sub.o div.o

3. 编译可执行程序时指定所使用的动态库。-l:指定库名-L:指定库路径

  gcc test.c -o a.out -l mymath -L ./lib

4. 运行可执行程序./a.out 会出现错误

  出错原因分析:

连接器:工作在链接阶段,工作时需要-l -L
动态链接器:工作于程序运行阶段,工作时需要提供动态库所在目录位置,指定动态库路径并使其生效,然后再执行文件。

通过指定环境变量指定动态库所在位置:export LD_LIBRARY_PATH=./lib,暂时的,重启终端失效,因为环境变量是进程的概念,关闭终端之后再打开,是两个进程,环境变量发生了变化。要想永久生效,需要修改配置文件vim ~./bashrc,文件生效. .bashrc或者source .bashrc或者重开终端让其自己加载

方法1:export LD_LIBRARY_PATH=./lib

方法2:vim ~./bashrc. .bashrc或者source .bashrc或者重开终端

方法3:拷贝自定义库到/lib(标准C库所在位置)

方法4:配置文件法

sudo vim /etc/ld.so.conf, 写入动态库绝对路径,sudo ldconfig -v 使配置文件生效。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值