关于Qt第三方库(1):把自己代码编译为动态库并使用

本文演示了将一个已有的类(SalesData)编译为动态库,并且新建的项目中使用该库。
对于小白用户,自己查了网上一些资料,进行了摸索,并将过程记录下来,供他人参考。

1.编译为动态库

1.1利用动态库模板

在Qt Creator中新建项目,选择Library在这里插入图片描述
选择共享库
在这里插入图片描述
后续需要输入类名,例如类名为SalesData,这个是《C++ primer》这本书中经常使用的类。。。一直点下一步,最后会生成一个cpp和h文件。
在cpp文件和h文件中进行编写,完毕后点击“构建”按钮,会生成库文件。

1.2 自己修改pro文件生成

上述这种方法,是生成cpp和h文件,然后在里边修改。如果我们已经有了库源文件,可以把之前默认生成的cpp和h删掉,把我们自己的库文件添加进去。当然有些繁琐,实际上我们可以自己动手来配置库项目。
在这里插入图片描述
1、选择空白的C++项目
2、建立完毕后,加入已有的cpp和h文件
3、在pro文件中将TEMPLATE = app改为lib。表明我们这个是生成库的项目。
4、点击构建就可以生成库文件。为了查看方便,我们修改DESTDIR,就是设置生成的文件的位置,表明我们生成到lib这个目录下。
在这里插入图片描述
但是在windows下只能生成o文件,后续没再仔细看如何才能弄好。

1.3 生成结果

.o:就相当于windows里的obj文件 ,一个.c或.cpp文件对应一个.o文件
.a:是好多个.o合在一起,用于静态连接 ,多个.a可以链接生成一个exe的可执行文件

.dll:windows系统动态链接库,作为共享函数库的可执行文件。
.so:linux系统动态链接库,,用于动态连接的,和windows的dll差不多,使用时才载入。

在windowd生成结果
这个SalesData.dll就是生成的动态链接库。
在这里插入图片描述

在linux下生成结果
以so结尾的就是动态链接库。生成了一个动态链接库文件和3个软链接。(不知为什么会这样)
在这里插入图片描述
在这里插入图片描述

2.使用动态链接库

调用动态库必要条件:定义动态库的头文件 和 动态库文件

我们以linux系统为例说明。

新建一个项目uselib,来调用第一节中我们生成的动态库。
在项目pro所在的目录下,新建两个目录:inc和dll,用于存放动态库的头文件和动态库文件。
1、将第一节动态库的.h文件拷到inc目录下,将第一节生成的动态库文件拷到so目录下
2、在pro文件中添加动态库的路径,其中$$PWD就是项目所在的路径。

LIBS += -L$$PWD/so/ -lmakelib

注意大写的-L后接库所在的路径,小写的-l后接库名,库名不需加lib前缀和so后缀。

设置LIBS其实说穿了很简单,就是把库文件随便放到一个目录下,然后告诉工程,你的库文件放到哪里了,叫什么名字。

3、使用该库的文件的开头包含库的头文件

#include "inc/salesdata.h"

3.在运行目录下运行

在这里插入图片描述
运行目录下,执行./uselib可执行程序,会提示错误,找不到库文件
解决方法如下:
1、我们将源文件目录下的so文件拷贝到此处,然后执行如下,就是将该目录添加到环境变量中。然后再执行./uselib就可以执行了。注意每次开机都需要执行该export命令。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./so/

2、为了以后使用方便,可以编写脚本,以后执行该脚本,就不用每次开机都执行export了。

#!/bin/bash
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./so/
./uselib

3、也可以将export这一行添加到~/.bashrc文件最后,就不用每次开机都执行export了。

发布了14 篇原创文章 · 获赞 0 · 访问量 339

猜你喜欢

转载自blog.csdn.net/sksukai/article/details/105312083