Linux 函数库
概述
函数库其实就是函数,只不过是系统所调用的函数。这样说吧,我写了一个软件,所有的功能都需要我自己完成吗?其实是不需要的,因为很多功能是别人已经写好的,我只需要拿来用就好了。这些有独立功能并且可以被其他程序调用的程序是函数。
函数库分类
当其他程序调用函数时,根据是否把函数直接整合到程序中而分为静态函数和动态函数。我们分别看看这两种函数的优缺点。
静态函数库
函数库文件一般以"*.a"扩展名结尾,这种函数库在被程序调用时会被直接整合到程序当中。
优点:程序执行时,不需要在调用外部数据,可以直接执行。
缺点:因为把所有内容都整合到程序中,所以编译文件会比较大,升级比较困难,需要把整个程序重新编译。
动态函数库
函数库文件通常以"*.so"扩展名结尾,这种函数库在被程序调用时,并没有直接整合到程序当中,当程序需要用到函数库的功能时,再去读取函数库,在程序中只保存了函数库的指向,如图 1 所示。

图 1 函数库调用
优点:因为没有把整个函数库整合到程序中,所以文件较小,升级方便,不需要把整个程序重新编译,只需要重新编译安装函数库就好。
缺点:程序在执行时需要调用外部函数,如果这时函数出现问题,或指向位置不正确,那么程序将不能正确执行。
目前 Linux 中的大多数函数库是动态函数库,主要是因为升级方便;但是函数的存放位置非常重要,而且不能更改。目前被系统程序调用的函数主要存放在"/usr/lib"和"/lib"中,而 Linux 内核所调用的函数库主要存放在"/lib/modules"中。
安装函数库
那么,系统中的可执行程序到底调用了哪些函数库呢?可以査询到吗?当然可以,命令如下:
[root@localhost ~]# ldd -v 可执行文件名
选项:-v: 显示详细版本信息
比如,査看一下 ls 命令调用了哪些函数库,命令如下:
[root@localhost ~]# ldd /bin/ls
linux-gate.so.1 => (0x00d56000)
libselinux.so.1 =>/lib/libselinux.so.1 (0x00cc8000)
librt.so.1 =>/lib/librt.so.1 (0x00cb8000)
libcap.so.2 => /lib/libcap.so.2 (0x00160000)
libacl.so.1 => /lib/libacl.so.1 (0x00140000)
libc.so.6 => /lib/libc.so.6 (0x00ab8000)
libdl.so.2 => /lib/libdl.so.2 (0x00ab0000)
/lib/ld-linux.so.2 (0x00a88000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00c50000)
libattr.so.1 =>/lib/libattr.so.1 (0x00158000)
新安装了一个函数库,如果是正常安装的,则是不需要手工调整函数库的。如果没有安装正确只要把函数库放入指定位置,一般放在"/usr/lib"或"/lib"中,然后把函数库所在目录写入"/etc/ld.so.conf"文件中。注意是写入函数库所在目录,而不是写入函数库的文件名。比如:
#把函数库复制到/usr/lib/目录中
[root@localhost ~]# cp *.so /usr/lib/
#修改函数库配置文件
[root@localhost ~]# vi /etc/ld.so.conf
#写入函数库所在目录(其实/usr/lib/目录默认已经被识别)
include ld.so.conf.d/*.conf
/usr/lib
接着使用 ldconfig 命令重新读取 /etc/ld.so.conf 文件,把新函数库读入缓存即可。命令如下:
#从/etc/ld.so.conf文件中把函数库读入缓存
[root@localhost ~]# ldconfig
#列出系统缓存中所有识别的函数库
[root@localhost ~]# ldconfig -p
Linux 函数库的更多相关文章
- linux 函数库使用
程序函数库可分为3种类型:静态函 数库(static libraries).共享函数库(shared libraries)和动态加载函数库(dynamically loaded libraries) ...
- Linux学习笔记13——使用curses函数库
一 安装curses库 如果你的Linux系统中curses库,直接敲入命令sudo apt-get install libncurses5-dev,然后就会自动安装curses库,安装好之后敲入命令 ...
- linux curses函数库
fedora20,安装yum install ncurses-devel 编译时:-lncurses 头文件:#include<curses.h> 参考:man ncurses \linu ...
- Linux c codeblock的使用(三):使用函数库
(一)概念 什么是函数库呢?一下子说概念大家可能不太熟悉,但是这实际上是大家在windows系统上经常见到的东西.没错,就是那些后缀为DLL的文件. linux上实际也有自己的函数库文件,文件类型为. ...
- linux 动态库 静态库 函数覆盖
本文讨论了linux动态库 静态库中函数的覆盖问题. 测试目的: 同名函数,分别打成动态库libdync_lib.so与静态库libstatic_lib.a,并把libstatic_lib.a打到另 ...
- linux用命令行编译使用函数库
同步于气象家园日志 from fcode 视频 编译静态链接库 gfortran -c sub.f90 func.f90 产生了func.mod文件.注:mod文件是静态库的接口.如果删掉了fu ...
- Linux C函数库参考手册
目录 第1章 字符测试函数 isalnum(测试字符是否为英文字母或数字) isalpha(测试字符是否为英文字母) isascii(测试字符是否为ascii码字符) isblank(测试字符是否为空 ...
- 如何在Linux下添加函数库
如何为Linux增加库一. 静态库在Linux下的静态库是以.a为后缀的文件.1. 建静态库h1.c 源文件#include<stdio.h>void hello1(){printf(“t ...
- 【Linux】动态链接函数库
动静区别 1. gcc –c mylib.c –o mylib.o 2. gcc -shared -fPIC mylib.o -o libmylib.so 3. 将制作好的libmylib.so 复制 ...
随机推荐
- IOS设计模式浅析之桥接模式(Bridge)
引言 在项目开发中,我们会遇到这样的一种场景:某些类型由于自身的逻辑,往往具有两个或多个维度的变化,比如说大话设计模式书中所说的手机,它有两个变化的维度:一是手机的品牌,可能有三星.苹果等:二是手机上 ...
- NGINX date_udf 定义日志
Nginx日志自动按日期存储 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器,因它的稳定性 ...
- bitset在acm中的应用
ps:最近碰到一些用bitset优化常数的题目,以前也有接触但是都没有记下来,所以来写一篇博文 记录以后碰到的类似的题目. 应用一: 优化boolean multiplication 在做dp的时候, ...
- GoogleMap-------解决不能使用问题
前言:由于中国大部分Android手机中的Google服务都被阉割掉了,所以导致GoogleMap无法使用,可以用一下方法解决. 1.不能使用GoogleMap 2.若手机上装有安装市场之类的软件可搜 ...
- Vue实现远程获取路由与页面刷新导致404错误的解决
一.背景 先简单介绍一下现在项目情况:前后端分离,后端服务是Java写的,前端是Vue+ElementUI. 最近的一个需求是:通过后端Api去获取前端路由表,原因是每个登录角色对应的前端路由表可能是 ...
- 更新mac系统和更新到Xcode7.3版本出现的: cannot create __weak reference in file using manual reference counting
之前的编程没有遇到过,应该是苹果官方那边又做了新规吧. 不过不要紧,只要根据这个就能解决报错问题. Set Build Settings -> Apple LLVM 7.1 - Languag ...
- Map Hashtable Hashmap 集合四
Map是通过键值对来唯一标识的,所以不能重复 存相同键值对 Hashtable存的是键值对 Hashtable<key,value> key,value 都不能为null 方法get(); ...
- 在eclipse里面使用git仓库,并且使用maven加载项目
前提:安装完成git和maven(maven需要在eclipse中配置完成) 1.点击Windows->show view 选择Git Repositories(git仓库) 2.点击2号图标, ...
- 部署网站时的错误“one of its dependencies.试图加载格式不正确的程序。”解决方案。
Sever Error in '/' Application.Could not load file or assembly 'SresBase' or one of its dependencies ...
- 【BZOJ3325】[Scoi2013]密码 Manacher
[BZOJ3325][Scoi2013]密码 Description Fish是一条生活在海里的鱼.有一天他很无聊,就到处去寻宝.他找到了位于海底深处的宫殿,但是一扇带有密码锁的大门却阻止了他的前进. ...