静态库建立和使用步骤
现在有四个cpp文件,四个文件分别存放了加减乘除四种运算的函数,并且有一个头文件如下
#include <iostream>
using namespace std;
int add(int, int);
int sub(int, int);
int mul(int, int);
int div(int, int);
第一步:将四个cpp文件转换成二进制的.o 文件
第二步:将四个.o文件合成一个静态库文件
格式:ar + 库名(库的命名格式:lib+自由取名+.a)+.o
第三步:使用静态库
有一个main函数使用到了刚才的静态库,函数如下:
这时只需要calc库,calc.头文件就能成功编译并使用main函数了。main函数编译命令如下
参数解释:在上一个笔记中已经提到了,-L 后面加自定义库的路径, -l后面加库的名称(注意这个名称是把前面的lib和后面的.a去掉以后的名称)。
动态库建立和使用步骤
同上仍然是四个cpp文件
第一步:同样将四个cpp文件转换为二进制.o文件,但是需要加入-fpic命令
其中-fpic参数理解为与程序生成位置无关,也就是动态库的特性
第二步:将.o文件打包成一个动态库文件
命令格式:g++ -shared -o 库名(库名格式:lib+名称+.so) .o文件
注意一定要加-o
第三步:编译main函这里的参数和静态库一样,注意-l后面的名称一定要去头去尾。
注意:但是这个可执行文件运行会报错,如图
提示找不到动态库的路径,由于动态库不是直接放到代码段中去,而是在启动的时候才会用到,所以需要告知系统去哪里寻找到动态库,因此可以在环境变量中加入该路径,方法如下:
其中:$LD_LIBRARY_PATH是为了保证不覆盖原有的路径,只是添加一个路径
查看该环境变量的方法为
这种方法只能保证在该终端下可行,退出该终端后需重新设置才能运行
另一种方法是配置加载的链接库的路径。
打开链接库的配置文件
在文件中添加路径/home/gmq/example1,然后保存,再让设置生效
可以不加-v
这样就可以在所有终端下都可以直接执行了。
windows下通过VS2013建立动态库并调试使用
1.新建一个win32项目,其中创建时的选择如下,注意选择DLL,以及最好选择空项目(注意这个项目只能编译,不能运行)
2将所需要制作的c或cpp文件以及头文件,放到该目录下,并且添加到项目中,并且在需要让用户调用的函数前,加上__declspec(dllexport),源文件和头文件都需要加,然后编译就会在项目目录下的debug文件夹中生成dll文件和lib文件,其中dll文件是动态库,lib文件是对动态库的说明。这样动态库就做好了
3使用动态库,在你创建的项目中,首先把dll文件和lib文件拷贝到源文件头文件的路径下(最正确的做法,dll文件应该要和exe文件放在一起,但是没什么关系,lib文件一定要和源文件放在一起),然后在项目中属性->链接器->输入->附加依赖项 中加上lib文件的全称。
4.并且把要使用的头文件加入到项目中,编译即可使用。
注:__declspec(dllexport)宏在制作动态库时需要加,但是在使用动态库时不要在头文件中加,否则可能报错