Linux下Qt创建和调用共享库文件.so

Linux下Qt创建和调用共享库文件.so

费了点功夫,总算get了编写共享库(Shared Library,Windows下称为“动态链接库”,即Dynamic Link Library)和调用的这个新技能!
动态链接库的好处是不言而喻的,一个稍微复杂一点的程序,顶层设计的时候良好的类库划分可以让工作变得很简单,而将不同类编译成共享库文件可以实现程序的模块化,提高代码复用程度,在保证接口兼容的情况下更新一个程序只用更新共享库(Windows下是dll,Linux下常见的是so)即可。
下面以Linux下的Qt Creator这个IDE为例,讲述Qt(严格意义上是C++)共享库文件的编译和调用。

创建共享库项目

新建一个Qt Creator项目,Libraries -> C++ Library,类型为Shared Library,一路Next,选取模块的时候按需要选择,默认仅选择QtCore模块(如果你要包含UI,必须选择QtGui),我创建的共享库项目名为pluginTest。
双击打开项目的plugintest_global.h文件,我加入了一行:
 
1
#include <iostream> 非必须。注
 
XXX_global.h是所有Library项目都有的头文件,选取要用的Qt模块的包含声明也在该文件内。
按需编辑plugintest.h和plugintest.cpp,这个就是该共享库项目的plugintest类了,我加入了一个helloword()公共函数,内容为:
 
1
std::cout<<"Hello World!"<<std::endl;    ///改为简单的求和函数也行
 
保存并编译项目吧,没问题的话会在build-pluginTest-Desktop-Debug目录里生成libpluginTest.so.1.0.0共享库文件和libpluginTest.so、libpluginTest.so.1、libpluginTest.so.1.0这几个软链接。

调用共享库的项目

修改已有的项目pro文件,或者新建一个普通的Qt Console项目然后修改它的pro文件,加入下面几行:
 
 
我之前Qt的文章提到过的,INCLUDEPATH添加了plugintTest项目的目录,以便找到头文件,而LIBS添加的是共享库文件,-L添加目录,-l指定共享库名称(注意是共享库项目名而非共享库文件名),之前一直失败就是错在LIBS这里。
修改一下main.cpp调用pluginTest的helloworld()试试看吧,我的main.cpp内容如下:
 
1
2
3
4
5
6
7
8
9
10
#include <QCoreApplication>
#include "plugintest.h"//包含plugintest.h头文件
 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    PluginTest test;//PluginTest是plugintest.h中定义的类名
    test.helloworld();//调用helloworld
    //return a.exec();
}
 
保存编译项目然后运行。不出意外就会得到Hello World!的输出了,修改pluginTest项目的helloworld()函数重新编译该共享库,运行主程序就会得到不同的输出结果(不用重新编译主程序),这就是共享库(动态链接库)的好处所在。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值