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 ...
随机推荐
- 需要入门IT行业并且想做java后台小伙伴-简单谈谈后台开发Spring与SpringBoot
1.Spring能做什么 1.1.Spring的能力 1.2.Spring的生态 https://spring.io/projects/spring-boot 覆盖了: web开发 数据访问 安全控制 ...
- mac环境下安装python3的requests包
大家知道,mac环境默认安装的都是python2,自己装好python3之后,怎么使用pip来安装到python3下的包呢? 解决方法:pip3 install requests
- 【Azure 应用服务】如何来检查App Service上证书的完整性以及在实例中如何查找证书是否存在呢?
问题描述 1:如何来检查App Service上证书的完整性呢? 2:如何来检查App Service的实例上是否包含这个证书呢? Windows 环境 or Linux 环境? 问题解答 问题一: ...
- 【Azure 媒体服务】在Azure Media Service门户中使用HLS模式传输视频流,播放视频步骤
问题描述 如何在Azure Media Service门户中使用HLS模式传输视频流,播放视频步骤 问题解决 第一步:在 Media Service 这边点击资产.上传本地视频资源作为Media Se ...
- STL-list模拟实现
#pragma once #include"16my_Itetator.h" //测试用 #include<iostream> //测试用 using std::cou ...
- jsPlumb导航器
开源项目地址:https://gitee.com/easyxaf/jsplumb-navigator 前言 jsPlumb可用于连接DOM元素,它不依赖框架,所以与主流框架都可以无缝的集成.但比较遗憾 ...
- Ubuntu 与Windows 之间搭建共享文件夹
工作中经常需要搭建Linux环境用于测试以及其他开发需求,办公电脑通常是Windows 系统,为便于让文件在两个系统之间传输,可以采取共享文件的方式实现: 1.安装samba 服务: sudo apt ...
- Nginx 打不开 80端口占用 netstat -aon|findstr "80" 看有没有80占用 有的话 net stop http
Nginx 打不开 80端口占用 netstat -aon|findstr "80" 看有没有80占用 有的话 net stop http
- Nordic芯片调研简析
一 公司简介: Nordic semiconductor是一家在奥斯证券交易所(OSX:NOD)上市的挪威无晶圆厂半导体公司,专门研究IoT的无线技术.Nordic的声誉建立在领先的技术和开发工具之上 ...
- Kinaba discover查询语法
1.要搜索一个确切的字符串,即精确搜索,需要使用双引号引起来:path:"/app/logs/nginx/access.log" 2.如果不带引号,将会匹配每个单词:uid tok ...