技术标签: Linux Linux QT调用动态库(.so) Linux环境下,Qt Creator创建动态库 Qt开发 qt 创建和调用动态库 Windows环境下,Qt Creator创建动态库 Windows QT调用动态库(.so)
Windows下动态链接库是.dll文件,静态链接库文件是.lib文件。Linux下动态库是.so文件。
Qt嵌套在visual studio时,编译器是MSVC,而Qt Creator的编译器是MinGW,针对MSVC和MinGW这两种编译器,作个简单的介绍:
他们都是很好用的编译工具,但是他们兼容的并不好。当你的项目使用MinGW编译的使用,想要用一个MSVC编译生成的库时就会有问题。使用MinGW编译项目的时候,所使用的Lib也要是MinGW编译的。如果你只是开发Window平台的软件时,最好用Qt MSVC组合,这样可以使用大量的第三方lib,还有很多的构建指令,毕竟window上MSVC才是王道。 编码的问题,QT5的Qstring默认是UTF8格式,QT5极力推介把源码用UTF8格式存储。 但是MSVC只支持带BOM的UTF8格式,qmake不支持带BOM的UTF8格式,逼我只能用GBK么。这样的话,用qt5,每次都要Qstring::fromLocal8bit(“我是中国人”);况且就算BOM问题解决了,源代码是UTF8了。MSVC的执行编码也是GBK。【此段参考链接如下:https://yq.aliyun.com/wenji/242316】
我使用的环境是:ubuntu 16.04(64位) + qt5.7.1 。在安装环境时碰到了一点小问题,这里说一下。目前高版本QT的Linux安装包都是64位,所以需要在64位Linux系统下才可以安装,否者是不可以运行的。我找了一些低版本的QT安装包,例如“qt-creator-opensource-linux-x86_64-4.0.1.run”,带有“x86_64”字母,将此安装包在32位Linux下运行,也是失败的,随后我查看了此安装包信息,发现也是只支持64位系统的,苦逼的我只能装个64位Linux系统了。【好像以前QT版本都是有32位的安装包的,例如“qt-creator-opensource-linux-x86-4.0.1.run”,但是我确实没找到,如有大神知道在哪能下载,麻烦给我留言,感激不尽!】
(1)创建共享库项目
在选择模块是,选择“QtCore”和“QtGui”模块,下一步
(2)修改代码
在rsadecode.h的类中添加需要对外的接口,然后在rsadecode.cpp中实现,就可以了。
rsadecode.h
#ifndef RSADECODE_H
#define RSADECODE_H
#include "rsadecode_global.h"
#include "RSADecode_Sub.h" //这是我添加的其他类,不用考虑它
class RSADECODESHARED_EXPORT RSADecode
{
public:
RSADecode();
bool CheckKey(char *name, char* dstKey);
};
#endif // RSADECODE_H
rsadecode.cpp
#include "rsadecode.h"
#include <QDebug>
using namespace std;
static RSADecode_Sub rsa;
RSADecode::RSADecode()
{
// qDebug()<< "Hello";
}
bool RSADecode::CheckKey(char *name, char* dstKey)
{
// qDebug() << "CheckKey";
// char *fileName = name;
// char* macStr;
rsa.DecodeRSA(name, dstKey);
// dstKey = (char*)macStr;
// qDebug() << "解密后的字符:\n";
// qDebug() << dstKey;
return true;
}
(3)编译项目,生成动态库
(1)创建一个项目(控制台项目或者界面项目都可以)
(2)Linux系统,在项目的根目录下创建文件夹include和so,分别存放动态库的所有头文件和so文件。
(3)Linux系统,修改项目的pro文件,添加include和so文件目录,如下:
INCLUDEPATH += /home/server/TestDLL/include/
LIBS += -L/home/server/TestDLL/so -lRSADecode
其中,INCLUDEPATH包含动态库头文件,LIBS包含动态库文件,-L后加上需要添加的目录(中间无空格),-l指定共享库名称(注意:共享库项目名而非共享库文件名)
(4)Windows系统,在项目的根目录下创建文件夹include和DLL,分别存放动态库的所有头文件和dll文件。
(5)Windows系统,修改项目的pro文件,添加include和DLL文件目录,如下:
INCLUDEPATH += E:\QTProject\ColorSelector\include\
LIBS += -LE:\QTProject\ColorSelector\DLL -lRSADecode
其中,INCLUDEPATH包含动态库头文件,LIBS包含动态库文件,-L后加上需要添加的目录(中间无空格),-l指定共享库名称(注意:共享库项目名而非共享库文件名)
(4)在需要调用动态库里方法的文件中,包含“rsadecode.h”,实例化RSADecode类,调用接口。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "rsadecode.h" //包含动态库对外的头文件
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
//实例化RSADecode类
RSADecode m_rsa;
char macStr[50];
memset(macStr, 0, sizeof(macStr));
//调用动态库里的接口
m_rsa.CheckKey(fileName, macStr);
}
(5)编译运行项目,即可实现调用动态库。至此所有步骤已完成。
文章浏览阅读8.7k次,点赞4次,收藏15次。原文链接:http://blog.yeyuzhen.cn/?p=203_lcov覆盖率 cmake
文章浏览阅读1.1k次。电池包在设计BDU 的时候 预充电阻计算计算方程: T = RC * Ln[(Vbatt - V0)/( Vbatt - Vpre)] 注:T为预充电时间,R为预充电阻,C为外部电容,Vbatt为电池包电压,V0为负载端闭合高压前..._电池bms预充电阻及预充时间的计算simulink
文章浏览阅读1w次,点赞2次,收藏5次。今天帮同学从一个网站上下载点数据, 但是上面有上百个链接, 一个一个点击下载实在是工作量太大。 于是自己就想找一个命令行下载工具并用Python写一个简单的脚本来替代这些工作。百度了一下, 找到了curlcurl: curl是利用URL语法在命令行方式下工作的文件传输工具。 [百科: http://baike.baidu.com/view/1326315.htm]官网: http:_bat脚本 curl 下载文件夹下所有文件
文章浏览阅读3.1w次,点赞21次,收藏142次。更新中..._cesium ue4
文章浏览阅读67次。1、Axure RP(Rapid Prototyping)Axure(读音为Ack-Sure)无疑是目前最受关注的原型开发工具,其能通过组件的方式帮助网站或软件设计师快速建立带有注释的原型(流程图、线框图),并凭借自定义可重用的元件、动态面板以及丰富的script能够建立基本功能或页面逻辑的动态演示文件。Axure借鉴了office的界面,能够让用户快速上手,并且提供了..._程序员原型法常用工具
文章浏览阅读145次。1、 uni.request(OBJECT) 发起网络请求参数名 类型 必填 默认值 说明url String 是 开发者服务器接口地址data Object/String/ArrayBuffer 否 请求的参数header Object 否 设置请求的 header,header 中不能设置 Referer。method String 否 GET (需大写)有效值:OPTIONS, GET...
文章浏览阅读6.3k次,点赞5次,收藏9次。最近,极光大数据根据极光调研平台收到的1684份有效问卷,发布了一份2018年3月中国程序员研究报告,涉及了程序员工作和生活等方方面面,现在笔者与大家分享一下:生活中的程序员婚恋篇七成程序员处于未婚状态,其中四成程序员为单身22-30岁的程序员中,只有19.3%已完成结婚生子的人生大事,在主要职业群体中比例为最低。看来说程序员是大龄青年的聚集地,此言非虚。42%的22-30岁受访程序员目前是单身。..._杭州软件比上海
文章浏览阅读4.4k次,点赞5次,收藏19次。之前在 Unity Built-in 管线中,我们在自定义 shader 中,可以使用一下代码来获取 Ambient 环境光的颜色:fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.rgb但是在 Unity URP 中,发现不生效了,虽然 URP 中也有定义这个宏,定义在:#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/UnityInput.hlsl" 中 #define UN_unity ambient
文章浏览阅读164次。转载于:https://www.cnblogs.com/sunyongjie1984/p/4319969.html
文章浏览阅读221次。find就不用多说了,就是递归遍历文件夹。which:有时候可能在多个路径下存在相同的命令,该命令可用于查找当前所执行的命令到底是哪一个位置处的命令。whereis:是在数据库中查找文件,在数据库(var/lib/slocate/slocate.db)中查找与文件名相匹配的二进 制文件、源文件和帮助手册文件,使用之前可以使用up..._linux中whereis locate which的区别
文章浏览阅读1.2k次。出现这种异常是因为没有设置 project.build.home.directory 参数,系统找不到源代码文件的位置。解决办法:1.首先下载源代码,可参考如何下载olat源代码并在eclipse中查看2.在部署的服务中找到 olat.local.properti_guidemo_main不显示
文章浏览阅读1.4k次。Rect 类定义了一个矩形结构,同样实现了 Parcelable 序列化接口。Rect 类定义了 left、top、right、bottom 四个成员变量,我们需要正确理解这 4 个成员变量的作用:left:矩形左边线条离 y 轴的距离top:矩形上面线条离 x 轴的距离right:矩形右边线条离 y 轴的距离bottom:矩形底部线条离 x 轴的距离矩形是一种非常常见的图_android根据rect坐标添加控件