栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

linux静态库、动态库

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

linux静态库、动态库

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


前言

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

一、linux分文件编程

demo1.c 主函数

#include
#include"demo2.h"

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

demo2.c 功能函数

#include
void head()
{
        printf("this is headfilen");
}

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的大小。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/864374.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号