网站建设微信商城运营,下载jsp网站开发用啥工具,做网页的编程语言,windows 2003 取消网站访问密码一、什么是库
库是写好的现有的#xff0c;成熟的#xff0c;可以复用的代码。现实中每个程序都要依赖很多基础的底层库#xff0c;不可能每个人的代码都从零开始#xff0c;因此库的存在意义非同寻常。
本质上来说库是一种可执行代码的二进制形式#xff0c;可以被操作…一、什么是库
库是写好的现有的成熟的可以复用的代码。现实中每个程序都要依赖很多基础的底层库不可能每个人的代码都从零开始因此库的存在意义非同寻常。
本质上来说库是一种可执行代码的二进制形式可以被操作系统载入内存执行。库有两种静态库.a、.lib和动态库.so、.dll。
所谓静态、动态是指链接。回顾一下将一个程序编译成可执行程序的步骤
二、静态库
之所以成为【静态库】是因为在链接阶段会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接。 试想一下静态库与汇编生成的目标文件一起链接为可执行文件那么静态库必定跟.o文件格式相似。 其实一个静态库可以简单看成是一组目标文件.o/.obj文件的集合即很多目标文件经过压缩打包后形成的一个文件。静态库特点总结 ✪ 静态库对函数库的链接是放在编译时期完成的。 ✪ 程序在运行时与函数库再无瓜葛移植方便。 ✪ 浪费空间和资源因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件。
下面编写一些简单的四则运算C类将其编译成静态库给他人用头文件如下所示
#pragma onceclass StaticMath{public: StaticMath(void); ~StaticMath(void); static double add(double a, double b);//加法 static double sub(double a, double b);//减法 static double mul(double a, double b);//乘法 static double div(double a, double b);//除法 void print();};
————————
linux下使用ar工具、Windows下vs使用lib.exe将目标文件压缩到一起并且对其进行编号和索引以便于查找和检索。一般创建静态库的步骤如图所示
三、Linux下创建与使用静态库
Linux静态库命名规则 Linux静态库命名规范必须是”lib[your_library_name].a”lib为前缀中间是静态库名扩展名为.a。 1、创建静态库.a
通过上面的流程可以知道Linux创建静态库过程如下
首先将代码文件编译成目标文件.oStaticMath.o
g -c StaticMath.cpp
注意带参数-c否则直接编译为可执行文件
然后通过ar工具将目标文件打包成.a静态库文件
ar -crv libstaticmath.a StaticMath.o
2、生成静态库 libstaticmath.a。 大一点的项目会编写makefile文件CMake等等工程管理工具来生成静态库输入多个命令太麻烦了。
四、使用静态库
编写使用上面创建的静态库的测试代码
#include StaticMath.h#include iostreamusing namespace std;int main(int argc, char* argv[]){ double a 10; double b 2; cout a b StaticMath::add(a, b) endl; cout a - b StaticMath::sub(a, b) endl; cout a * b StaticMath::mul(a, b) endl; cout a / b StaticMath::div(a, b) endl; StaticMath sm; sm.print(); system(pause); return 0;}
————————
Linux下使用静态库只需要在编译的时候指定静态库的搜索路径-L选项、指定静态库名不需要lib前缀和.a后缀-l选项。 ✪ -L表示要连接的库所在目录 ✪ -l指定链接时需要的动态库编译器查找动态连接库时有隐含的命名规则即在给出的名字前面加上lib后面加上.a或.so来确定库的名称。
五、Windows下创建与使用静态库
1、创建静态库.lib
如果是使用VS命令行生成静态库也是分两个步骤来生成程序 ✪ 首先通过使用带编译器选项 /c 的 Cl.exe 编译代码 (cl /c StaticMath.cpp)创建名为“StaticMath.obj”的目标文件。 ✪ 然后使用库管理器 Lib.exe 链接代码 (lib StaticMath.obj)创建静态库StaticMath.lib。
当然我们一般不这么用使用VS工程设置更方便。创建win32控制台程序时勾选静态库类型打开工程“属性面板”→”配置属性”→”常规”配置类型选择静态库。 Build项目即可生成静态库。
2、使用静态库
测试代码Linux下面的一样。有3种使用方法
▶ 方法一
在VS中使用静态库方法
① 工程“属性面板”→“通用属性”→“框架和引用”→”添加引用”将显示“添加引用”对话框。
“项目”选项卡列出了当前解决方案中的各个项目以及可以引用的所有库。 在“项目”选项卡中选择 StaticLibrary。
单击“确定”。 ② 添加StaticMath.h 头文件目录必须修改包含目录路径。
打开工程“属性面板”→”配置属性”→“C/C”→” 常规”在“附加包含目录”属性值中键入StaticMath.h 头文件所在目录的路径或浏览至该目录。 编译运行OK。 如果引用的静态库不是在同一解决方案下的子工程而是使用第三方提供的静态库lib和头文件上面的方法设置不了。还有2中方法设置都可行。
▶ 方法二
打开工程“属性面板”→”配置属性”→ “链接器”→ ”命令行”输入静态库的完整路径即可。 ▶ 方法三
① “属性面板”→”配置属性”→“链接器”→”常规”附加依赖库目录中输入静态库所在目录
② “属性面板”→”配置属性”→“链接器”→”输入”附加依赖库中输入静态库名StaticLibrary.lib。