如何创建和使用动态链接库与Linux下QT添加链接库使用Opencv的方法

版权声明:本文为博主原创文章or学习笔记,未经博主允许不得转载。欢迎留言,私信or邮件。 https://blog.csdn.net/HYY0228/article/details/66974870

一、创建动态链接库

新建一个Qt Creator项目,Libraries -> C++ Library,类型为Shared Library,一路Next,选取模块时候按需要选择,默认仅选择QtCore模块(如果你要包含UI,必须选择QtGui),我创建的共享库项目名为pluginTest。双击打开项目的plugintest_global.h文件,我加入了一行:

#include <iostream>


XXX_global.h是所有Library项目都有的头文件,选取要用的Qt模块的包含声明也在该文件内。

按需编辑plugintest.h和plugintest.cpp,这个就是该共享库项目的plugintest类了,我加入了一个helloword()公共函数,内容为:

std::cout<<"Hello World!"<<std::endl;


保存并编译项目吧,没问题的话会在build-pluginTest-Desktop-Debug目录里生成libpluginTest.so.1.0.0共享库文件和libpluginTest.so、libpluginTest.so.1、libpluginTest.so.1.0这几个软链接。

二、使用动态链接库

假设:
现在有一个动态链接库名为 libXYZ.so, 路径为/path/to/the/lib,
该动态链接库的头文件为 XYZ .h,路径为/path/to/the/include
则应该添加如下内容到.pro文件

INCLUDEPATH += /path/to/the/include
LIBS +=  -L/path/to/the/lib
LIBS += -lXYZ
  1. 符号 -L 与 符号 -l 区别: 大写 L 代表着动态库(.so文件)所在的路径;小写 l 代表动态库的名字
  2. 动态库的命名: 在Linux下面,动态库命名规则是 libXXXX,即lib是必须的前缀。则在添加LIBS项的时候,可以省略, 即 -lXYZ实际上就等于 libXYZ
  3. Qt的qmake实际上实现的是把这个.pro文件编译成为Makefile文件。假如打开工程文件夹并找到Makefile,可以看到我们在.pro文件添加的内容已经添加到Makefile里面的相应位置。
  4. .pro文件要求使用绝对路径,故不能像shell脚本一样使用一些变量。但是有一个小trick,可以利用PWD获得.pro文件所在的路径,也可以某种程度上实现相对路径。例如:
INCLUDEPATH += $$PWD/include

修改已有的项目pro文件,或者新建一个普通的Qt Console项目然后修改它的pro文件,加入下面几行:

INCLUDEPATH +=/home/someone/Projects/pluginTest/

LIBS += -L/home/someone/Projects/build-pluginTest-Desktop-Debug -lpluginTest

修改一下main.cpp调用pluginTest的helloworld()试试看吧,我的main.cpp内容如下:

#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()函数重新编译该共享库,运行主程序就会得到不同的输出结果(不用重新编译主程序),这就是共享库(动态链接库)的好处所在。

三、Linux下QT添加链接库使用Opencv的方法

INCLUDEPATH += /usr/local/include \
                /usr/local/include/opencv \
                /usr/local/include/opencv2

LIBS += /usr/local/lib/libopencv_highgui.so \
        /usr/local/lib/libopencv_core.so    \
        /usr/local/lib/libopencv_imgproc.so

四、提示

不是qt application无法包含qt的库。

参考1:http://blog.csdn.net/lywzgzl/article/details/42805991

参考2:http://blog.csdn.net/hyichao_csdn/article/details/49801217

猜你喜欢

转载自blog.csdn.net/HYY0228/article/details/66974870