Linux--关于库

什么是库
库是一种可执行代码的二进制形式,通常把一些常用的函数制作成各种函数库,然后被系统载入内存中运行

两种库 - 载入的时间不同
静态库:在链接阶段被加载到目标文件中程序运行时不需要静态库编译后的可执行程序体积较大
命名:libXXX.a
动态库:编译的时候不会被链接进来,在程序执行的时候被载入程序运行时需要动态库编译后的可执行程序体积不变
命名:libXXX.so

在这里插入图片描述

静态库的制作
使用GNU下的ar 工具制作
(1) 写好功能文件和头文件 - hello.c 和 hello.h
(2) 将hello.c 编译生成目标文件 hello.o
gcc hello.c -c -o hello.o
(3) 使用ar 将hello.o制作成静态库
ar crs libmyhello.a hello.o - hello.o不能放在前面

(4) 测试
gcc test.c -lmyhello -L.
-l:指定要链接的库文件
-L:指定库文件所在的路径

制作动态库
使用gcc工具
(1) 写好功能文件和头文件 - hello.c 和 hello.h
(2) 使用gcc编译生成动态库
gcc hello.c -fpic -c -o hello.o //可以不加
gcc hello.o -shared -o libmyhello.so
或者:gcc hello.c -fpic -shared -o hello.o
-shared:指定生成动态链接库
-fPIC(-fpic):表示编译为位置独立的代码。位置独立的代码即位置无关代码,
在可执行程序加载的时候可以存放在内存内的任何位置。若不使用该选项则编译后的代码是位置相关的代码,
在可执行程序加载时是通过代码拷贝的方式来满足不同的进程的需要,没有实现真正意义上的位置共享

参数
c:表示无提示方式创建文件包
r:在文件包中替代文件
s:强制重新生成文件包的符号表

(3) 测试
gcc test.c -lmyhello -L.

ldd:查看某个可执行程序加载库的情况
注意:当静态库和动态库重名时,系统会以动态库为准

动态库的加载过程
执行可执行程序时,会加载动态库,寻找存放动态库的配置文件
存放动态库的配置文件的默认目录为 /etc/ld.so.conf.d/以及所属的众多子目录内的配置文件
配置文件指定的库文件的绝对路径为 /usr/lib或/lib
根据配置文件中的库文件的路径去往/usr/lib 或/lib,将动态库加载到可执行程序中
使动态库生效

  1. 将动态库拷贝到 /usr/lib或/lib目录下
  2. 修改LD_LIBRARY_PATH环境变量
    sudo vim /etc/bash.bashrc
    在最后添加
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/linux/beike/lib
    重启终端才能生效
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值