静态库和动态库的使用
2016-02-11 22:05
169 查看
关于库
================
1,静态库和动态库
1.1 静态库:书店(卖出去) (优点:速度稍快,不依赖库 缺点:浪费存储空间)
1.2 动态库:图书馆(借用) (缺点:速度稍慢,依赖于库 优点:节省大量空间)(更常用)
2,制作静态库:(以example1.c、example2.c,假设这些都是不含main函数的代码)
gcc example1.c -o example1.o -c
gcc example2.c -o example2.o -c
ar rcs libxxx.a example1.o example2.o (将example1.o和example2.o放到libxxx.a中)
3,制作动态库:
gcc example1.c -o example1.o -c
gcc example2.c -o example2.o -c
gcc -shared -fPIC -o libyyy.so example1.o example2.o (将example1.o和example2.o放到libyyy.so中)
4,使用库文件:(假设main.c代码中使用了example1.c和example2.c的代码)
gcc main.c -o main -L库所在路径 -lxxx
gcc main.c -o main -L库所在路径 -lyyy
注意:
使用静态库编译的程序,可以不依赖于库直接运行。
使用动态库编译的程序,运行时,必须确保程序可以找到该动态库:
1. 将该动态库直接放置到系统的标准库路径下(比如/lib 、/usr/lib)
2. 将库所在路径设置到环境变量LD_LIBRARY_PATH中: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库所在路径
================
1,静态库和动态库
1.1 静态库:书店(卖出去) (优点:速度稍快,不依赖库 缺点:浪费存储空间)
1.2 动态库:图书馆(借用) (缺点:速度稍慢,依赖于库 优点:节省大量空间)(更常用)
2,制作静态库:(以example1.c、example2.c,假设这些都是不含main函数的代码)
gcc example1.c -o example1.o -c
gcc example2.c -o example2.o -c
ar rcs libxxx.a example1.o example2.o (将example1.o和example2.o放到libxxx.a中)
3,制作动态库:
gcc example1.c -o example1.o -c
gcc example2.c -o example2.o -c
gcc -shared -fPIC -o libyyy.so example1.o example2.o (将example1.o和example2.o放到libyyy.so中)
4,使用库文件:(假设main.c代码中使用了example1.c和example2.c的代码)
gcc main.c -o main -L库所在路径 -lxxx
gcc main.c -o main -L库所在路径 -lyyy
注意:
使用静态库编译的程序,可以不依赖于库直接运行。
使用动态库编译的程序,运行时,必须确保程序可以找到该动态库:
1. 将该动态库直接放置到系统的标准库路径下(比如/lib 、/usr/lib)
2. 将库所在路径设置到环境变量LD_LIBRARY_PATH中: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库所在路径
相关文章推荐
- Tomcat
- Android辅助功能AccessibilityService与抢红包辅助
- 欢迎使用CSDN-markdown编辑器
- HDU 1029 基础dp
- PCB设计之原理图绘制笔记
- socket 中的read
- iOS之运行时(Runtime)
- 2016/02/11
- Arcgis server java develop begining
- 安装win7和centos6.7双系统 记录
- Animator根运动清除刚体速率问题测试
- 图片画画板
- UIView的setNeedsDisplay和setNeedsLayout方法
- 任务栏浏览器主页被劫持
- Gradle教程Part2:java工程
- 链表ADT C语言实现
- hdu2457 DNA repair(AC自动机+dp)
- Vim配置
- 101. Symmetric Tree LeetCode
- neuq oj 1017平面切割(特别版)C++