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 App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
问题描述 在Azure App Service for Windows的环境中,部署.NET应用,其中使用了 SAP NetWeaver RFC函数 (需要加载 sapnwrfc.dll).详细的错误 ...
- 十步带你用IDEA创建一个WEB项目及部署(Tomcat)
部署一个web项目首先需要安装Tomcat,还没安装的朋友们可以看一下我这个博客: https://www.cnblogs.com/deyo/p/17241878.html 第一步:打开Idea-新建 ...
- flomo 窗口置顶 - 通用方法 autohotkey
需求 开网页的时候需要记录一些东西 想一直显示 操作 要安装 https://www.autohotkey.com/ 创建个 .ahk 文件 运行下 快捷键是 alt+小键盘8 ;置顶当前窗口 !Nu ...
- Swing 使用 beautyeye_lnf.jar 美化
Springboot整合Swing制作简单GUI客户端项目记录 https://blog.csdn.net/Youdmeng/article/details/106549991
- day17--Java常用类05
Java常用类 5.其他常用类 5.1Math类 java.lang.Math提供了一系列静态方法用于科学计算:其方法的参数和返回值类型一般为double型.如果需要更加强大的数学运算能力,计算高等数 ...
- 逆向通达信Level-2 续八 (BackTrace, Trace任意TdxW.exe内部函数, Breakin)
TdxW kun anti-debugging, i debug you without a debugger. 添加bt命令,BackTrace 下图是hack某一个函数后使用bt命令进行Trace ...
- KTL 最新支持Qt5窗口编程,一个支持C++14编辑公式的K线技术工具平台
K,K线,Candle蜡烛图. T,技术分析,工具平台 L,公式Language语言使用c++14,Lite小巧简易. 项目仓库:https://github.com/bbqz007/KTL 国内仓库 ...
- oracle用户密码有@符号连接方法
oracle用户密码不小心设置了带有"@"符号,正常登陆总是无法登陆,提示无法解析的连接字符串错误,其实解决办法很简单,转义即可,示例如下: exp system/\"x ...
- 网络流媒体协议的联系与区别 (RTP RTCP RTSP RTMP HLS)(转)
网络流媒体协议的联系与区别(RTP RTCP RTSP RTMP HLS) RTP RTCP RTSP RTMP HLS 区别与联系 RTP传输流媒体数据.RTCP对RTP进行控制,同步.RTSP发起 ...
- MySQL(初识数据库)
一 存储数据的演变过程 随意的存在一个文件中.数据格式也是千差万别的完全取决于我们自己 软件开发目录规范 限制了存储数据的具体位置 ''' bin conf core lib db readme.tx ...