LinuxGod

LinuxGod.net
Linux大神网——精选每一篇高品质的技术干货
  1. 首页
  2. 开源快讯
  3. 正文

库是什么?库的分类、分类库、动态库

2022年11月29日 293点热度

一、库是什么? 简介:

假如,你有一个庞大的工程,代码量达到数百兆甚至是数G,你经常会遇到好多重复或常用的地方。每次使用到这些地方时如果都重新写一份基本相同的代码,这当然可以,不过这样会大大地降低工作效率,而且影响代码的可读性。更不好的是日后的修改工作会使你变得非常的繁琐,这样很不利于后期的维护。如果把这些相同的功能代码分别以模块的形式存放起来,把他们编译成库,使用时直接调用他们的库,这样直接使用起来非常的方便,更有利于代码的维护和升级。

库的概念:

库是由源代码编译出来的,是对一组源文件编译出来的中间文件(可以看我上一篇文章,在代码经过汇编过程后)。使用库可以做到不开放源代码,同时令其他单元可以调用到的效果,实现良好的接口封装。

其实,现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。比如我们常使用的printf函数,就是c标准库提供的函数。我们在使用时只需要包含相应的头文件就可以使用(非静态编译还要有相应的库文件)。而不用关心printf函数具体是如何实现的,这样就大大提高了程序员编写代码的效率。

二、库的分类

库大体上可以分为两类:静态库和动态库。在windows中静态库是以 .lib 为后缀的文件,共享库是以 .dll 为后缀的文件。在linux中静态库是以 .a 为后缀的文件,动态库是以 .so为后缀的文件。

创建动态库:

//func.c
int max(int a ,int b){
    return (a>b)?a:b;

linux创建文件_linux创建指定大小文件_linux创建netrc文件

}

生成链接库文件,会生成一个libfunc.so

gcc -fPIC -shared -o libfunc.so func.c

PIC:产生与位置无关代码,PIC(Position-Independent Code),代码中没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意位置linux vi 命令,都可以正确的执行

-shared:生成动态链接库

调用动态库linux是什么,编译,执行: 创建 test.c文件

 1. vim test.c 

2. Shift + i 3. 编写代码 4. Esc Shift + : 5. wq

编写代码

#include
 
void main(){

linux创建指定大小文件_linux创建文件_linux创建netrc文件

printf("%dn",max(23,5)); }

编译(包含链接库),生成可执行文件test.out

gcc test.c -o test.out -L. -lfunc

执行

./test.out

答案毫无疑问,报错!

在这里插入图片描述

解决报错

因为系统链接库列表中没有找到这个链接库,需要将这个链接库注册到系统

可以这么理解linux创建文件,因为编译生成执行文件的时候,只是使用了libfunc.so的定义,并没有把函数体整个包含进来,运行的时候用函数定义去动态查找完整的方法linux创建文件,那完整的方法怎么找?

1.使用系统默认链接库目录,这种方式需要把libfunc.so放入系统目录下:/lib,/usr/lib等

2.指明链接库目录目录,这种方式需要把libfunc.so目录注册到系统系统目录列表里,将libfunc.so所在目录写入文件etc/ld.so.conf,保存,执行:ldconfig,让系统添加库文件夹下的链接库文件

上面这时候再执行:./test.out,就能获得结果了

代码优化

linux创建文件_linux创建netrc文件_linux创建指定大小文件

上面代码虽然能正确执行了,但是有个问题,如果给你一个so文件,你能使用吗?

打开文件是乱码,里面有什么方法大家都不知道,所以我们要定义一个规范,能让使用者清晰的知道链接库中包含了哪些方法,所以需要建立一个头文件,说明func链接库里面包含哪些方法

//test.c
#include
#include"func.h"
 
void main(){
    printf("%dn",max(23,5));
}

这样就优化了代码的可读性

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 动态库
最后更新:2022年11月29日

Linux大神网

每日更新,欢迎收藏♥ 不积跬步无以至千里,加油,共勉。

点赞
< 上一篇
下一篇 >

Linux大神网

每日更新,欢迎收藏♥
不积跬步无以至千里,加油,共勉。

最新 热点 随机
最新 热点 随机
如何安装便携式WiFi驱动程序?360wifi驱动的教程 CentOS云服务器搭建网站和CentOS搭建DNS解析服务 如何在linux上创建一个用户,减少不必要的沟通成本 如何在Linux系统中查看CPU信息使用lscpu命令行 linux服务器搭建ftp的6下安装vsftpd步骤及步骤 贵州工业职业技术学院求职意向期望工作地--诚聘英才 实验1Linux安装实验掌握虚拟机的使用 Linux系统tar命令的使用方法及使用命令教程 linux 开源nas系统 杰和科技NAS服务器媒体见面会在京召开 Android与Linux开发大不同 Linux系统软件安装包:自己动手,安装不用愁 车市新战局:汽车操作系统会复制智能手机的历史吗? Linux文件系统种类 如何卸载用源码包安装的软件?在线视频教程推荐 「职位」ASP.、PHP、Linux服务器集群开发 Torvalds:Linux内核开发的创新前景充满了热情 Linux文件系统的结构从终端窗口探索Linux目录树结构 卸载软件命令Linux.You linux软件开发如何入门?学习Linux步骤及学习方法介绍 14年Linux发行版的有趣历史观点
嵌入式Linux操作系统学习规划+LINUX路线,主攻江苏电信天翼校园客户端故障指引及解决办法(101)英特尔GMAGMA950显卡驱动程序/WIN8/8.1电信校园网宽带用USB数据线共享给电脑无线上网国防科大开源操作系统:它只是一个吉祥的象征10个常用Linux文本查看命令及其详细说明和使用示例Linux嵌入式系统内核裁剪与定制方法的介绍情况淘宝教育热卖C语言编程开发C++程序设计零基础入门课程从CPU、内存、硬盘、显卡等这些方面安装Linux系统的最低配置Linux通过chkconfig设置开机启动服务创建的几种常见方式(技术分析)Linux多线程的使用与操作系统的区别通常rar命令由一个主命令加若干选项(可选)构成RedHatLinux中自动运行程序中的应用linux 读写文件 关于Linux内核的神秘面纱,你知道几个?使用wget实用程序的有用命令行工具的使用怎么设置linux开机项自启动?方式是怎样的?嵌入式Linux应用层与驱动层要想学习关于Linux内核的交叉编译步骤和方法:步骤、方法STM32嵌入式linux开发流程及应用程序分析-STMlinux下有哪些文件在介绍lsof命令实用用法介绍?
Linux是什么操作系统?与wi简单地说,想设计一个代替Minix 关于Linux系统版本命令的一些看法及解决办法的通知 Linux系统进程与文件相关的信息 如何远程连接服务器桌面?如何保证在ssh故障情况下还能够访问到服务器? samba主机名称解析服务//samba/smb.conf fedora 禁止root登录 如何在Linux上建立SSH安全连接的方法?安全 小白在阿里云云服务器上如何发布自己的网站(建站|详细) Windows下默认的编码是GBK-8,怎么办? 2020年最佳Android模拟器的精选清单,你值得拥有 系统架构师的考试分为,要开始战斗了!!(下) Linux定时任务安全权限提升) FATFS文件系统负责管理和存储文件信息的特点及应用 unix环境高级编程第二版 pdf 中国十大Java排行榜,第一名竟然是他!! 2018年波及众多Linux发行版的性能对比会更加深入 更新原压缩包中的文件这五个是独立的命令,压缩解压都要用到 关于Linux内核的交叉编译步骤和方法:步骤、方法 【Linux基础知识】Linux系统的启动流程经历(二) 1.+KaliWinKex使用体验三种输入框架的三种框架 Linux系统用户账号管理有什么区别呢?【豹子融】 deb文件后无法通过Ubuntu20.04的软件中心安装?你不是唯一遇到此问题的人
标签聚合
虚拟机 文件 应用 linux服务器 命令 文件目录 内核 操作 软件 linux系统
书籍
课程
技术群
技术干货大合集↓
  • 2023年9月 / 81篇
  • 2023年8月 / 93篇
  • 2023年7月 / 94篇
  • 2023年6月 / 90篇
  • 2023年5月 / 93篇
  • 2023年4月 / 90篇
  • 2023年3月 / 129篇
  • 2023年2月 / 84篇
  • 2023年1月 / 161篇
  • 2022年12月 / 187篇
  • 2022年11月 / 76篇
友情链接:

Linux书籍 | Linux命令 | Linux系统 | RHCE红帽认证 | Linux软件 | Linux教程 | CentOS系统 | Linux内核 | Linux服务器 | Linux大神 | IT资源

COPYRIGHT © 2023 linuxgod.net ALL RIGHTS RESERVED.