静态库与动态库
不管是Linux还是Windows中的库文件其本质和工作模式都是相同的, 只不过在不同的平台上库对应的文件格式和文件后缀不同。程序中调用的库有两种静态库
和动态库
,不管是哪种库文件本质是还是源文件,只不过是二进制格式只有计算机能够识别,作为一个普通人就无能为力了。
在项目中使用库一般有两个目的,一个是为了使程序更加简洁不需要在项目中维护太多的源文件,另一方面是为了源代码保密,毕竟不是所有人都想把自己编写的程序开源出来。
当我们拿到了库文件(动态库、静态库)之后要想使用还必须有这些库中提供的API函数的声明,也就是头文件,把这些都添加到项目中,就可以快乐的写代码了。
1.静态库
在Linux中静态库由程序 ar 生成,现在静态库已经不像之前那么普遍了,这主要是由于程序都在使用动态库。关于静态库的命名规则如下:
- 在Linux中静态库以lib作为前缀, 以.a作为后缀, 中间是库的名字自己指定即可, 即: libxxx.a
- 在Windows中静态库一般以lib作为前缀, 以lib作为后缀, 中间是库的名字需要自己指定, 即: libxxx.lib
1.1生成静态链接库
生成静态库,需要先对源文件进行汇编操作 (
使用参数 -c
) 得到二进制格式的目标文件 (.o 格式
), 然后在通过ar
工具将目标文件打包就可以得到静态库文件了 (libxxx.a
)。使用
ar
工具创建静态库的时候需要三个参数:
参数c
:创建一个库,不管库是否存在,都将创建。参数s
:创建目标文件索引,这在创建较大的库时能加快时间。参数r
:在库中插入模块(替换)。默认新的成员添加在库的结尾处,如果模块名已经在库中存在,则替换同名的模块。
生成静态链接库的具体步骤如下:
1.需要将源文件进行汇编, 得到 .o 文件, 需要使用参数 -c
# 执行如下操作, 默认生成二进制的 .o 文件
# -c 参数位置没有要求
$ gcc 源文件(*.c) -c
# 提示头文件找不到, 添加参数 -I 重新头文件路径即可
gcc 源文件(*.c) -c -I /path/
2.将得到的 .o 进行打包, 得到静态库
$ ar rcs 静态库的名字(libxxx.a) 原材料(*.o)
3.发布静态库
Continue reading