Qt调用动态库的三种方式(linux)


准备工作:
方式一:静态加载so库
# pro文件
LIBS += -Llib -lsoowCapture -lhv -lpthread -lImageProc -ljpeg -lcamapi # 项目
添加现有文件,将 libsoowCapture.h 这个头文件加进来 # dialog.cpp
void Dialog::test()
{ char err[100];
soow_InitCameraLib(err);
long ret = soow_GetDevCount(err);
QMessageBox::information(this, "123", QString::number(ret));
}
方式二:动态加载so库(QLibrary)
# dialog.cpp #include <QLibrary>
void Dialog::test()
{ QLibrary mso("./lib/libsoowCapture.so");
if(mso.load())
{
QMessageBox::information(this, "123", "ok");
}
else
{
QMessageBox::information(this, "123", "no");
} typedef long (*func1)(char*);
typedef long (*func2)(char*);
typedef long (*func3)(long, char*, char*);
func1 f1 = (func1)mso.resolve("soow_InitCameraLib");
func2 f2 = (func2)mso.resolve("soow_GetDevCount");
func3 f3 = (func3)mso.resolve("soow_GetDevName"); char err[100];
f1(err);
long ret = f2(err);
QMessageBox::information(this, "123", QString::number(ret)); char name[100];
char err1[100];
long ret1 = f3(0, name, err1);
QMessageBox::information(this, "123", name);
}
# 终端,在Qt编译后的文件夹中打开终端 // 1.设置临时环境变量
export LD_LIBRARY_PATH=lib // 2.运行编译出的程序
./untitled
运行结果可以见 方式三 下面的截图
方式三:动态加载so库(dlopen)
# pro 文件
LIBS += -ldl # dialog.cpp #include <dlfcn.h>
void Dialog::test()
{ void* handle = dlopen("./lib/libsoowCapture.so", RTLD_NOW);
if(handle)
{
QMessageBox::information(this, "123", "ok");
}
else
{
QMessageBox::information(this, "123", "no");
} typedef long (*func1)(char*);
typedef long (*func2)(char*);
typedef long (*func3)(long, char*, char*);
func1 f1 = (func1)dlsym(handle, "soow_InitCameraLib");
func2 f2 = (func2)dlsym(handle, "soow_GetDevCount");
func3 f3 = (func3)dlsym(handle,"soow_GetDevName"); char err[100];
f1(err);
long ret = f2(err);
QMessageBox::information(this, "123", QString::number(ret)); char name[100];
char err1[100];
long ret1 = f3(0, name, err1);
QMessageBox::information(this, "123", name);
}
# 终端,在Qt编译后的文件夹中打开终端 // 1.设置临时环境变量
export LD_LIBRARY_PATH=lib // 2.运行编译出的程序
./untitled


Qt调用动态库的三种方式(linux)的更多相关文章
- 调用sed命令的三种方式
调用sed命令的三种方式 调用sed有三种方式,一种为Shell命令行方式,另外两种是将sed命令写入脚本文件,然后执行该脚本文件. 三种方式的命令格式归纳如下: 一.在Shell命令行输入命令调用s ...
- Android 接入 OpenCV库的三种方式
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效——由一系列 C 函数和少 ...
- 加载gif动态图的三种方式
准备:本地图片资源,GifView
- jquery调用click事件的三种方式
第一种方式: $(document).ready(function(){ $("#clickme").click(function(){ alert("Hello Wor ...
- C#调用C++ DLL动态库的两种方式
第一种方式:C++导出函数, c#dllimport 的方式 在很多地方都看到过,如[dllimport "user32.dll"]这种代码,调用windows API,就是通过这 ...
- QT 调用 DLL 方法(三种方法)
Qt调用DLL方法一:使用Win32 API 在显式链接下,应用程序必须进行函数 调用以在运行时显式加载 DLL.为显式链接到 DLL,应用程序必须:? 调用 LoadLibrary(或相似的函 数) ...
- 办公室的远程传文件 的命令三种方式linux
不同的Linux之间copy文件常用有3种方法: 第一种就是ftp,也就是其中一台Linux安装ftp Server,这样可以另外一台使用ftp的client程序来进行文件的copy. 第二种方法就是 ...
- java:struts框架2(方法的动态和静态调用,获取Servlet API三种方式(推荐IOC(控制反转)),拦截器,静态代理和动态代理(Spring AOP))
1.方法的静态和动态调用: struts.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCT ...
- Struts2方法调用的三种方式
在Struts2中方法调用概括起来主要有三种形式 第一种方式:指定method属性 <action name="student" class="com.itmyho ...
- Struts2方法调用的三种方式(有新的!调用方法的说明)
在Struts2中方法调用概括起来主要有三种形式 第一种方式:指定method属性 <action name="heroAction" class="com.ABC ...
随机推荐
- 【Azure 云服务】Azure Cloud Service中的错误事件 Error Event(Defrag/Perflib) 解答
问题描述 在Azure Cloud Service的实例中,收集到各种 Error Event 内容,本文针对所收集的三种Event进行解析. 1: This operation is not sup ...
- [C++] epoll编写的echo服务端
直接贴代码,代码是运行在Linux上面的,通过 g++ epoll.cpp编译 #include <sys/socket.h> #include <sys/epoll.h> # ...
- C++ //deque容器 构造函数 //deque赋值操作 //deque大小操作 //重新指定大小 //deque没有容量概念 //deque插入和删除 //deque 容器数据存取 ////deque 排序 sotr算法
1 //deque容器 构造函数 //deque赋值操作 //deque大小操作 //重新指定大小 2 //deque没有容量概念 //deque插入和删除 //deque 容器数据存取 3 //// ...
- GaussDB(DWS)运维利刃:TopSQL工具解析
本文分享自华为云社区<GaussDB(DWS)运维利刃:TopSQL工具解析>,作者:胡辣汤. 在生产环境中,难免会面临查询语句出现异常中断.阻塞时间长等突发问题,如果没能及时记录信息,事 ...
- 【规范】看看人家Git提交描述,那叫一个规矩
前言 缘由 没想到玩了多年git,竟然还有提交描述规范 事情起因: 在工作迭代过程中,偶然发现同组小帅哥Git提交描述总是和自己的不大一样,秉承好奇至上的我特意去研究了下.竟然发现提交了这么多年的Gi ...
- Codeforces Round #844:C. Equal Frequencies
一.来源:Problem - C - Codeforces 二.题面 三.思路 先考虑一个子问题模型:我们现在有用\(m_1\)种随机字母组成的n个数,各字母个数未定,现在需要使这n个数变为\(m_2 ...
- Android7.0以上的分享图片文件错误及解决方法
原文地址: Android7.0以上的分享图片文件错误及解决方法 - Stars-One的杂货小窝 在Android7.0以上版本,分享图片文件出现了exposed beyond app throug ...
- C++ 中的关联,聚合,组合 以及 它们的生命周期。
关联,C++使用指针实现,两者到关系最弱,并且可以两向关联,B* A::b 与 A* B::a 可以并存,两者间没有明确的ownership关系,为什么不是引用,因为引用没有办法实现相向引用,这会是一 ...
- SQLI-LABS(Less-11、12)
Less-11(POST-Error Based-Single Quotes-String) 打开Less-11的页面,可以看到一个登录框,需要输入用户名和密码,由本关名字可知SQL语句是单引号闭合. ...
- 记录--极致舒适的Vue页面保活方案
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 为了让页面保活更加稳定,你们是怎么做的? 我用一行配置实现了 Vue页面保活是指在用户离开当前页面后,可以在返回时恢复上一次浏览页面的状态 ...