【Linux系统编程】库-动态库和静态库

  1. Linux下库的种类
  • 静态库:
    • 程序编译的时候会被链接到目标代码里面。程序运行时便不再需要该静态库。编译出来的体积较大。
    • 命名方式:以 lib开头,以 .a 结尾。
    • 使用场景:频繁移植时,使用静态库较好,移植程序时方便,不需要再将各种库拷贝过去。
  • 动态库(共享库):
    • 程序编译的时候不会被链接到目标代码里面。程序运行时仍然需要该动态库。
    • 命名方式:以 lib开头,以 .so 结尾。
    • 使用场景:有多个程序包含同一些库时,使用动态库。

静态库的制作

/**** 制作步骤 ****/
1. 编写或准备库的源代码
2. 将源码.c文件编译成.o文件
3. 使用ar命令创建静态库
4. 测试库文件
>> gcc -c StaticLibs.c
>  StaticLibs.o // 得到了.o文件

>> ar cr libStaticLibs.a StaticLibs.o // cr:create replay
> libStaticLibs.a // 得到了静态库文件
 
>> gcc test.c -lStaticLibs -L .  // -l:后面跟的是静态库的名字。
								 // -L:指定静态库的查找位置。-L. 表示在当前目录下去查找。

动态库的制作

/**** 制作步骤 ****/
1. 编写或准备库的源代码
2. 将源码.c文件编译成.o文件
3. 使用gcc命令创建静态库
4. 测试库文件
>> gcc -c -fpic DynamicLibs.c
>  DynamicLibs.o

>> gcc -shared -o libDynamicLibs.so DynamicLibs.o
>  libDynamicLibs.so

>> gcc test.c -lDynamicLibs -L.
>  a.out

>> ./a.out
>  ./a.out: error while loading shared libraries: libStaticLibs.so: cannot open shared object file: No such file or directory

这是因为系统会默认去/lib,/usr/lib目录下去查找动态函数库。
第一种方法:
将生成的动态库拷贝到/lib或者/usr/lib里面去,因为系统会默认去这俩个路径下寻找。
第二种方法:
把我们的动态库所在的路径加到环境变量里面去。
第三种方法:
修改ubuntu下的配置文件/etc/ld.so.conf,我们在这个配置文件里面加入动态库所在的位置,然后使用命令ldconfig更新目录。
这里使用第二种办法:

>> pwd
> /home/xxxxx

>> export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/zs/linux/nfs/13
// 应该在root用户下添加变量,否则会提示权限不够。

之后即可执行a.out。
但是只在当前终端下有效!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值