Linux 静态库与动态库

目录

1. 静态库与动态库的说明

2. 静态库:

静态库的制作:格式 xxx.a

静态库的编译:

3. 动态库:

动态库的制作: 格式 xxx.so

动态库的编译:

动态库的使用:


1. 静态库与动态库的说明

  • 静态库,libxxx.a,在编译时就将库编译进可执行程序中。
  1. 优点:程序的运行环境中不需要外部的函数库。
  2. 缺点:可执行程序大。
  • 动态库,又称共享库,libxxx.so,在运行时将库加载到可执行程序中。
  1. 优点:可执行程序小。
  2. 缺点:程序的运行环境中必须提供相应的库。
  3. 函数库目录:/lib /usr/lib。

以下以 main.c 和 sub.c 为例子生成静态库和动态库并使用。

main.c

#include <stdio.h>
int main()
{
	int x, y;
	int ret;
	x = 10;
	y = 5;
	ret = sub(x, y);
	printf("ret = %d\n", ret);
	return 0;
}

sub.c

int sub(int x, int y)
{
	return (x - y);
}

2. 静态库:

2.1 静态库的制作:格式 xxx.a

  • gcc sub.c -c  生成 sub.o文件
  • ar rcs libsubStatic.a sub.o  生成 sub.a 静态库文件      // sub 前要加 lib 后缀要改 .a

2.2 静态库的编译:

gcc main.c -lsubStatic -L ./ -o mainProStatic

  • -l 是指定要用的静态库,库名砍头去尾
  • -L 是告诉 gcc 编译器从 -L 指定的路径去找静态库,默认是从 /usr/local/lib 去找

2.2 静态库的使用:

因为在编译时就将库编译进可执行程序中,所以可以直接 ./mainProStatic 运行

3. 动态库:

3.1 动态库的制作: 格式 xxx.so

gcc -shared -fpic sub.c -o libsubDy.so

  • -shared 是指定生成动态库
  • -fpic 标准,fpic 选项作用于编译阶段,在生成目标文件时就得使用该选项以生成位置无关的代码

3.2 动态库的编译

gcc main.c -lsubDy -L ./ -o mainProDy

3.3 动态库的使用:

动态库的使用不能直接 ./mainProDy ,因为动态库使用的时候会去找动态库文件,默认也是去 /usr/local/lib 去找,所以使用的时候需要做一定的处理。

  • 方法一(风险):直接把动态库文件 libsubDy.so 放到 /usr/local/lib 中去。

  • 方法二(当前终端有效):先在动态库位置打出 pwd 获取当前路径,例如我的是/home/outside/08_LIB 。         然后配置环境变量   export LD_LIBRARY_PATH=/home/outside/08_LIB 配置完后即可使用程序。

  • 方法三(所有终端有效):在 /etc/ld.so.conf 文件里加入我们生成的库的目录,然后 sudo ldconfig /etc/ld.so.conf  因为不是在 home 目录下  所以操作都要加 sudo 。   /etc/ld.so.conf是非常重要的一个目录,里面存放的是链接器和加载器搜索共享库时要检查的目录,默认是从/usr/lib /lib中读取的,所以想要顺利运行,可以把我们库的目录加入到这个文件中。然后即可直接顺利运行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值