C/C++库文件的生成与使用
来源:互联网 发布:完美世界 小说 知乎 编辑:程序博客网 时间:2024/05/26 17:44
为什么要用库文件?
- 为了保密(机密性)
- 提高代码重用率,提升可扩展性(灵活性)
- 方便coders间的分工与合作,提高开发效率(高效开发)
- 保密的同时,清晰的结构也增加了可读性(知道接口作用即可)(可读性)
库文件的种类?
静态库
顾名思义,静态库就是静止的,何谓静止?将编译生成的库文件所依赖的目标文件.o打包(这时候就是静态库),在可执行文件的编译阶段,链接刚刚生成的静态库(静态链接),这个可执行文件后续的运行于所依赖的静态库没关系了。换句话说,这会删了静态库对刚刚的可执行文件是没有影响的。
静态库的后缀是.a、.lib
特点:生成可执行文件前完成链接、移植方便、浪费空间。动态库
了解了静态库,不难发现动态库是对静态库的一个补充。与创建静态库不同的是,不需要打包工具(ar、lib.exe),直接使用编译器即可创建动态库。
静态库的后缀是.so、.dll
特点:执行时链接、多次调用只有一份拷贝、节约空间。
linux下简单的用例
IDE提高编码效率的同时,却让coders忽视了更加底层的机制。有人说没必要,我想说,码农万岁。
这个博文只介绍linux下两件事,rt,库的生成和使用。其实不写太具体,无非就是各种命令,重要的思想。
- 静态库生成使用
上边说过了,静态库也要依赖一些文件,把所依赖的文件编译生成目标文件,然后打包成一个文件,就是静态库。可以这样写代码:
//没有使用makefile格式,重要的是思想^_^//func1.c, func2.c func1.h func2.h是库所依赖的文件//linux下编译他们,生成目标文件 g++ -c -o lib1.o func1.c g++ -c -o lib2.o func2.c//将lib1.o lib2.o打包成静态库,xxx是你的库名 ar rcs libxxx.a lib1.o lib2.o//main.c是需要引用刚刚生成库的文件,是可运行的(有main函数),生成target后,如果把libxxx.a删除,不影响target执行。 g++ -o target main.c -static -L ./ -lxxx//参数不知啥意思就man一下,如man g++,这也是linux方便的地方之一
- 动态库生成使用
动态库不需要打包,但是也有生成一步。
//没有使用makefile格式,重要的是思想^_^//func1.c, func2.c func1.h func2.h是库所依赖的文件//linux下编译他们,生成目标文件 g++ -c -o lib1.o func1.c g++ -c -o lib2.o func2.c//将lib1.o lib2.o生成动态库,xxx是你的库名 g++ -shared -fPIC -o libxxx.so lib1.o lib2.o//main.c是需要引用刚刚生成库的文件,是可运行的(有main函数),生成target后,如果把libxxx.a删除,将会影响target执行。 g++ -o target main.c -static -L $(INCLUDE) -lxxx -I $(HEADER) //$(INCLUDE)是.so的路径,$(HEADER)是.so依赖文件头文件路径
0 0
- linux .c文件生成库文件的方法与使用
- C/C++库文件的生成与使用
- linux C 生成与使用 so 文件
- Keil C 里面Lib库文件的生成与调用
- 菜鸟笔记:c/c++中关于lib与dll文件的生成与使用。
- 使用Javah 生成C/C++头文件的误区
- 使用Javah 生成C/C++头文件的误区
- [C#]如何使用VisualStudio生成可以安装的exe文件
- 使用Javah 生成C/C++头文件的误区
- 使用Javah 生成C/C++头文件的误区
- C语言使用matlab生成的滤波器头文件
- 使用javah编译生成c的.h文件
- 使用javah生成C/C++头文件的误区
- 使用Javah 生成C/C++头文件的误区
- 使用Javah 生成C/C++头文件的误区
- Python使用C语言生成的库
- 20、C#:使用VS2010生成dll文件
- 巩固C语言(九)----静态库文件的生成和使用、劫持技术
- tcp/ip ---------- 网际协议之tcp
- 【安卓笔记】使用DialogFragment托管dialog
- 插值查找详解
- 第十二周 阅读项目 (5)
- HDU ACM 2234 无题I->IDA*算法
- C/C++库文件的生成与使用
- hdu 5248 序列变换【二分】
- ScrollView嵌套ListView只显示一行(总结)
- 计算几何小模板
- 生活还是很美好的
- CSU 1648
- java下载网络文件并重命名
- 编程实现队列的入队、出队、测长、打印
- VelocityTracker类介绍