linux静态库、动态库

linux静态库、动态库,第1张

文章目录
  • 前言
  • 一、linux分文件编程
  • 二、linux静态库
    • 1.静态库的创建
    • 2.静态库的使用
  • 三、linux动态库
    • 1.动态库的创建
    • 2.动态库的使用
  • 总结


前言

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

一、linux分文件编程

demo1.c 主函数

#include
#include"demo2.h"

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

demo2.c 功能函数

#include
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下指定的路径下找库。
-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的大小。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/872955.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存