Linux 下的静态(函数)库、动态(函数)库
2024-08-30 18:26:04
0. 基本
- 在命名上,静态库的名字一般是 libxxx.a,动态库的名字一般是 libxxx.so,有时 libxxx.so.major.minor,xxx 是该 lib 的名字,major 是主版本号,minor是副版本号。
linux 系统存放函数库的目录:/lib(/lib64),/usr/lib(/usr/lib64)
lrwxrwxrwx. 1 root root 7 Sep 2 22:24 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Sep 2 22:24 lib64 -> usr/lib64
1. 判断一个程序有没有链接程序库
- file:查看文件类型;
- ldd:将所有依赖的动态函数库取出来查阅;
$ ldd $(which sshd)
# which sshd ⇒ /usr/bin/sshd
$ ldd $(which sshd rsyslogd xinetd httpd)
2. 静态库与动态库的编译
静态库:
- 1、生成目标文件:
$ gcc -Wall -c file1.c file2.c file3.c
# 不用指定生成.o文件名(默认生成file1.o, file2.o, file3.o)。- 2、从.o目标文件创建静态连接库:
$ ar rv libNAME.a file1.o file2.o file3.o
r : 将flie1.o, file2,o, file3.o插入archive,如故原先archive中已经存在某文件,则先将该文件删除。
v : 显示ar操作的附加信息动态库:
- 1、生成目标文件
$ gcc -Wall -c -fpic file1.c file2.c file3.c
# 可选参数
# -g:生成调试信息,供 gdb 使用
# -o0:指定编译优化级别fpic: 指定生成的.o目标文件可被重定址. pic是position idependent code的缩写: 位置无关代码.
- 2、生成动态库文件
$ gcc -shared -o libNAME.so file1.o file2.o file3.o
一般地, 连接器使用main()函数作为程序入口. 但在动态共享库中没有这样的入口. 所以就要指定-shared选项来避免编译器显示出错信息.
- 3、上述两条命令可以合并为:
$ gcc -Wall -shared -fpic -o libNAME so file1.c file2.c file3.c
references
最新文章
- XStream学习笔记
- SharePoint:WebPartPageUserException This page has encountered a critical error
- Linux 安装oracle客户端
- Android开发环境的调研
- 模拟iOS系统原生导航条隐藏或显示动画
- Nginx重写规则指南 转
- Ubuntu:Target filesystem doesn&;#39;t have /sbin/init (Slax 解决)
- alias 命令
- java functional syntax overview
- Javascript 原型继承(续)—从函数到构造器的角色转换
- Xcode7 修改bundle identifier
- 实现一个简单的sniffer
- javascript之Function函数
- JavaScript引用类型之Array数组之强大的splice()方法
- Hadoop2.0/YARN深入浅出(Hadoop2.0、Spark、Storm和Tez)
- [置顶] 简单解析linux下进程通信方法
- java web项目基础
- TouchSlide滚动插件BUG
- B/S 和 C/S两种架构
- es6的新特性--模板字符串