QT生成带界面的动态库并使用

一、练习环境

Ubuntu18.04 下安装的QT 5.12.0

二、库的生成

1、新建Project —> Library—>C++ 库

2、输入项目名QTLib,可以选择库类型:静态库,动态库,或者qt插件。要创建的是动态库,所以选择共享库

3、选择编译器,然后按照个人需求选择相关的模块,我就简单点选择QtWidgets

4、来到这里,目录结构的相关文件就已经建立好了

5、因为还需要一个ui界面文件,因此上面的qtlib.h和qtlib.cpp还需要重建。喜欢动手的可以看别的资料。我懒  我选择Qt自动创建:右键项目目录—>Add New…—>选择Qt设计师界面类—>界面模板选 Widget

6、注意类名要与原先一样 QTLib,点击下一步,点击完成

7、弹出下图提示,点击 ok  ,直接覆盖

8、选择 Yes to All

9、再次打开qttlib.h和qtlib.cpp文件

10、发现qtlib.h 里 共享库的宏 QTLIBSHARED_EXPORT 和头文件qtlib_global.h 没有了,把它补上

11、写个简单的用例,以便后面鉴别是否使用到动态库

ui 文件

cpp 文件

12、直接编译执行,出现了一堆重复定义的错误,是因为.pro文件里出现了重复定义,把相同的删掉一个就可以了

 

13、再次编译执行。因为创建的库文件,所以不会出现界面,弹出下图,直接关掉就行

14、去到构建目录,可以看到已经生成了相应的 so 库文件(windows平台最终生成的是dll文件,而linux下则是so文件)

三、使用动态库

1、新建一个QT 界面工程Test,ui文件只放一个qwidget 控件,把qtlib.h和qtlib_global.h拷贝到当前工程的文件目录下,包含头文件。(后面再修改动态库工程,qtlib.h有变化的还需及时替换到这里)

2、右键添加库—>选择外部库,指定路径。点击下一步,点击完成

3、QT 会自动在 .pro 文件 添加一大段内容(就是指定库的路径)

4、编写mainwindow.cpp ,简单地使用动态库

5、编译运行,出现了一个错误:找不到对应的动态链接库。

但由上面第14步,我们知道是系统是存在libQTLib.so.1文件的

/home/lwz/qt_project/build-Test-Desktop_Qt_5_12_0_GCC_64bit-Debug/Test: error while loading shared libraries: libQTLib.so.1: cannot open shared object file: No such file or directory

6、去到build-Test-Desktop_Qt_5_12_0_GCC_64bit-Debug目录,用ldd 查看了Test相关信息

明明存在动态库文件,为什么系统就是找不到呢。百思不得其解之际,突然想到会不会是我动态库所在的路径的问题?

尝试着去看了一下系统动态库的配置文件 /etc/ld.so.conf,发现里面没有libQTLib.so.1所在的路径

7、添加路径并生效配置

在终端执行命令:  sudo vi /etc/ld.so.conf

在最后添加  libQTLib.so.1所在的路径

在终端执行命令:sudo ldconfig  ,生效配置文件

8、再次运行程序,成功

      

注:以上修改系统动态库的配置文件 /etc/ld.so.conf 只是验证问题方法,后续还是要根据个人良好习惯统一整合处理动态库的路径目录等,当然不能每生成一个库就改一次配置文件啦

最后来到这里,不禁有个疑问:这个带界面的库和控件提升有什么区别?

(才开始整QT库,恳请指教,望勿喷)

  • 6
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值