C/C++库文件的生成与使用

来源:互联网 发布:完美世界 小说 知乎 编辑:程序博客网 时间:2024/05/26 17:44

为什么要用库文件?

  1. 为了保密(机密性)
  2. 提高代码重用率,提升可扩展性(灵活性)
  3. 方便coders间的分工与合作,提高开发效率(高效开发)
  4. 保密的同时,清晰的结构也增加了可读性(知道接口作用即可)(可读性)

库文件的种类?

  1. 静态库
    顾名思义,静态库就是静止的,何谓静止?将编译生成的库文件所依赖的目标文件.o打包(这时候就是静态库),在可执行文件的编译阶段,链接刚刚生成的静态库(静态链接),这个可执行文件后续的运行于所依赖的静态库没关系了。换句话说,这会删了静态库对刚刚的可执行文件是没有影响的。
    静态库的后缀是.a、.lib
    特点:生成可执行文件前完成链接、移植方便、浪费空间。

  2. 动态库
    了解了静态库,不难发现动态库是对静态库的一个补充。与创建静态库不同的是,不需要打包工具(ar、lib.exe),直接使用编译器即可创建动态库。
    静态库的后缀是.so、.dll
    特点:执行时链接、多次调用只有一份拷贝、节约空间。

linux下简单的用例

IDE提高编码效率的同时,却让coders忽视了更加底层的机制。有人说没必要,我想说,码农万岁。
这个博文只介绍linux下两件事,rt,库的生成和使用。其实不写太具体,无非就是各种命令,重要的思想。

  1. 静态库生成使用
    上边说过了,静态库也要依赖一些文件,把所依赖的文件编译生成目标文件,然后打包成一个文件,就是静态库。可以这样写代码:
//没有使用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方便的地方之一
  1. 动态库生成使用
    动态库不需要打包,但是也有生成一步。
//没有使用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
原创粉丝点击