linux静态库、动态库

本文详细介绍了Linux环境下如何进行分文件编程,以及静态库和动态库的创建与使用。静态库通过`ar`命令创建,使用时链接到目标程序;动态库利用`gcc-shared`生成,运行时由系统动态加载。静态库优点是移植方便,缺点是占用磁盘空间大;动态库节省内存,但加载速度较慢。动态库的搜索路径可以通过`LD_LIBRARY_PATH`环境变量设置。
摘要由CSDN通过智能技术生成


前言

linux分文件编程
linux静态库和动态库的创建和使用

一、linux分文件编程

demo1.c 主函数

#include<stdio.h>
#include"demo2.h"

int main()
{
        head();
        printf("this is main\n");
        return 0;
}

demo2.c 功能函数

#include<stdio.h>
void head()
{
        printf("this is headfile\n");
}

demo2.h:函数申明

void head();

同时编译两个文件

gcc demo1.c demo2.c

运行结果
在这里插入图片描述

二、linux静态库

1.静态库的创建

首先生成.o文件

gcc demo2.c -c

在这里插入图片描述

其次将.o文件生成.a静态文件

ar rcs libStatic.a demo2.o

在这里插入图片描述

2.静态库的使用

gcc demo1.c -lStatic -L ./

运行结果
在这里插入图片描述

三、linux动态库

1.动态库的创建

gcc -shared -fpic demo2.c -o libDynamic.so

在这里插入图片描述

2.动态库的使用

gcc demo1.c -lDynamic -L ./

运行结果
在这里插入图片描述
动态库的默认搜索路径在

/usr/local/lib
/usr/lib

所以通过环境变量LD_LIBRARY_PATH指定动态库的搜索路径

export LD_LIBRARY_PATH="/home/CLC/shumeipai/test3"

修改完环境变量后执行结果
在这里插入图片描述


总结

1.头文件中<>和"“区别:<>只会从系统配置得到库环境中寻找头文件,一般用于标准库头文件;”"优先从当前文件夹中寻找头文件,若找不到则到系统默认的库环境中去找,一般用于自定义的头文件。

2.linux库的概念:库是 一种可执行代码的二进制形式,可以被操作系统载入内存执行。可分为静态库,动态库和共享函数库。
静态函数库,是在程序执行前就加入到目标程序中去了 ;
动态函数库同共享函数库是一个东西(在linux上叫共享对象库, 文件后缀是.so ,windows上叫动态加载函数库, 文件后缀是.dll)。

3.静态库和动态库的优缺点:
静态库
优点:静态库别打包到应用程序中,加载速度快;发布程序无需提供静态库,因为已经在app中,移植方便
缺点:链接是完整地拷贝至可执行文件中,被多次使用就有多份亢余拷贝;更新、部署、发布麻烦
动态库
优点:链接是不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序可以共用,节省内存;程序升级简单,因为app里面没有库的源码,升级之后只要库的名字不变,函数名以及参数不变,只是实现做了优化,就能加载成功
缺点:加载速度比静态库慢;发布程序需要提供依赖的动态库

4.ar:linux中修改,创建静态库。查看参数含义 直接ar 或者–help。r:在库中插入模块,c:创建一个库,s:创建目标文件索引。-L ./:在-L下指定的路径下找库。ar理解为打包生成一个静态库。
-l是制定要用的动态库,库名为除去lib和后缀名剩下的部分,
-shared 指定生成动态库
-fpic 标准,fPIC 选项作用于编译阶段,在生成目标文件时就得使用该选项,以生成位置无关的代码。

5.静态库文件.a文件,动态库文件.so文件,以lib开头

6.* 号通配符作用:匹配任意(0个或多个)字符或字符串,包括空字符串。
ls * .c:列出以.c结尾的文件
ls demo*:列出以demo开头的文件

7.mv:移动文件,重命名文件

8.export LD_LIBRARY_PATH 是临时的,换个窗口就没作用,所以通过脚本来执行
start.sh脚本

export LD_LIBRARY_PATH="/home/CLC/shumeipai/test3"

./a.out

给脚本加上可执行的权限

chmod +x start.sh

运行脚本后结果
在这里插入图片描述
9.绝对路径包括:/ :表示根目录;~ :表示用户目录;
相对路径包括:. 表示当前目录;. . :表示上一级目录

10.du start.sh:查看start.sh的大小。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值