【QT+QGIS跨平台编译】之四:【libSSH2+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录

  • 一、libSSH2介绍
  • 二、文件下载
  • 三、文件分析
  • 四、pro文件
  • 五、编译实践

一、libSSH2介绍

libSSH2是一个开源的C函数库,用来实现SSH2协议。

SSH(Secure SHell)到目前为止有两个不兼容的版本——SSH1和SSH2。

SSH2避免了RSA的专利问题,并修补了CRC的缺陷,增加了AES和Twofish等对称加密算法。
在这里插入图片描述

二、文件下载

libSSH2网站:
libSSH2
在这里插入图片描述
下载压缩包:libssh2-1.10.0.tar.gz

三、文件分析

解压缩libssh2-1.10.0.tar.gz文件。
进入libssh2-1.10.0目录
在这里插入图片描述
CMakeLists.txt记录了要加载的文件目录。
在这里插入图片描述


四、pro文件

windows环境下的libssh2_config.h文件:

从libssh2-1.10.0/win32目录下,拷贝libssh2_config.h,到win目录下:

在这里插入图片描述

linuxmac目录下的libssh2_config.h文件进行修改如下:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

配置头文件:

#头文件
HEADERS +=  ./agent.h \./blf.h \./channel.h \./comp.h \./crypto.h \./libssh2.h \./libssh2_priv.h \./mac.h \./mbedtls.h \./misc.h \./openssl.h \./packet.h \./session.h \./sftp.h \./transport.h \./userauth.h \./wincng.h
win32 {HEADERS += ./win/libssh2_config.h
}
linux* {HEADERS += ./linuxmac/libssh2_config.h
}
macx {HEADERS += ./linuxmac/libssh2_config.h
}

配置源文件:

#源文件
SOURCES +=  ./agent.c \./agent_win.c \./bcrypt_pbkdf.c \./blowfish.c \./channel.c \./comp.c \./crypt.c \./global.c \./hostkey.c \./keepalive.c \./kex.c \./knownhost.c \./mac.c \./mbedtls.c \./misc.c \./openssl.c \./packet.c \./pem.c \./publickey.c \./scp.c \./session.c \./sftp.c \./transport.c \./userauth.c \./version.c \./wincng.c

配置预定义项:

DEFINES -= UNICODE
DEFINES += LIBSSH2_OPENSSL
win32 {DEFINES += LIBSSH2_WIN32 _CRT_SECURE_NO_DEPRECATE _CRT_NONSTDC_NO_DEPRECATE
}

依赖库配置:

win32 {LIBS += -LD:/Qt/Tools/OpenSSL/Win_x64/libLIBS += -llibcryptoLIBS += -luser32 -lws2_32
}
linux* {LIBS += -lcrypto
}
macx {LIBS += -L/usr/local/opt/openssl@3/libLIBS += -lcrypto
}

形成003.libssh2-1.10.0.pro文件:

QT += core networkTEMPLATE = lib
CONFIG += c++17DESTDIR = ../QGIS
CONFIG(debug, debug|release){MOC_DIR = ../build-QGIS/ssh2/Debug/mocRCC_DIR = ../build-QGIS/ssh2/Debug/rccUI_DIR = ../build-QGIS/ssh2/Debug/uiOBJECTS_DIR = ../build-QGIS/ssh2/Debug/obj
}else{MOC_DIR = ../build-QGIS/ssh2/Release/mocRCC_DIR = ../build-QGIS/ssh2/Release/rccUI_DIR = ../build-QGIS/ssh2/Release/uiOBJECTS_DIR = ../build-QGIS/ssh2/Release/obj
}CONFIG(debug, debug|release){TARGET = ssh2d
}else{TARGET = ssh2
}
DEFINES -= UNICODE
DEFINES += LIBSSH2_OPENSSL
win32 {DEFINES += LIBSSH2_WIN32 _CRT_SECURE_NO_DEPRECATE _CRT_NONSTDC_NO_DEPRECATE
}# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
#当前目录
INCLUDEPATH += ./
#openssl路径
win32 {INCLUDEPATH += ./winINCLUDEPATH += D:/Qt/Tools/OpenSSL/Win_x64/includeINCLUDEPATH += D:/Qt/Tools/OpenSSL/Win_x64/include/openssl
}
linux* {INCLUDEPATH += ./linuxmacINCLUDEPATH += /opt/Qt/Tools/OpenSSL/src/includeINCLUDEPATH += /opt/Qt/Tools/OpenSSL/src/include/openssl
}
macx {INCLUDEPATH += ./linuxmacINCLUDEPATH += /usr/local/opt/openssl@3/includeINCLUDEPATH += /usr/local/opt/openssl@3/include/openssl
}#ZLIB路径
INCLUDEPATH += ../zlib-1.2.12
#LIBS
LIBS += -L../QGISCONFIG(debug, debug|release){LIBS += -lzlibd
}else{LIBS += -lzlib
}
win32 {LIBS += -LD:/Qt/Tools/OpenSSL/Win_x64/libLIBS += -llibcryptoLIBS += -luser32 -lws2_32
}
linux* {LIBS += -lcrypto
}
macx {LIBS += -L/usr/local/opt/openssl@3/libLIBS += -lcrypto
}#头文件
HEADERS +=  ./agent.h \./blf.h \./channel.h \./comp.h \./crypto.h \./libssh2.h \./libssh2_priv.h \./mac.h \./mbedtls.h \./misc.h \./openssl.h \./packet.h \./session.h \./sftp.h \./transport.h \./userauth.h \./wincng.h
win32 {HEADERS += ./win/libssh2_config.h
}
linux* {HEADERS += ./linuxmac/libssh2_config.h
}
macx {HEADERS += ./linuxmac/libssh2_config.h
}#源文件
SOURCES +=  ./agent.c \./agent_win.c \./bcrypt_pbkdf.c \./blowfish.c \./channel.c \./comp.c \./crypt.c \./global.c \./hostkey.c \./keepalive.c \./kex.c \./knownhost.c \./mac.c \./mbedtls.c \./misc.c \./openssl.c \./packet.c \./pem.c \./publickey.c \./scp.c \./session.c \./sftp.c \./transport.c \./userauth.c \./version.c \./wincng.c# Default rules for deployment.
#unix {
#    target.path = /usr/lib
#}
#!isEmpty(target.path): INSTALLS += target

五、编译实践

用QtCreator程序,打开003.libssh2-1.10.0.pro文件。
在这里插入图片描述

在windows下编译,形成:
在这里插入图片描述

在linux下编译,形成:
在这里插入图片描述

在macos下编译,形成:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/638946.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis 动态SQL条件查询(注释和XML方式都有)

需求 : 根据用户的输入情况进行条件查询 新建了一个 userInfo2Mapper 接口,然后写下如下代码,声明 selectByCondition 这个方法 package com.example.mybatisdemo.mapper; import com.example.mybatisdemo.model.UserInfo; import org.apache.ibatis.annotations.*; import j…

DCDC电路基础认知

前言 从开关电源(BMS充电器)入门硬件之——DCDC电路基础认知 有纰漏请指出,转载请说明。 学习交流请发邮件 1280253714qq.com 最近做的项目中有个需求,输入的电压是变化的(12-24V),但要保证…

unity单例模式

文章目录 在Unity中,单例模式是一种常用的编程设计模式,用于确保在整个应用程序生命周期中,只有一个类的实例存在。这样可以保证数据的全局唯一性和共享性,例如游戏场景中的资源管理器、游戏控制器、事件管理器等。 以下是一个简单…

EtherNet/IP开发:C++开发CIP源代码

① 介绍一下CIP CIP是一种考虑到自动化行业而设计的通用协议。然而,由于其开放性,它可以并且已经应用于更多的领域。CIP网络库包含若干卷: 第1卷介绍了适用于所有网络自适应的CIP的常见方面。本卷包含通用对象库和设备配置文件库&#xff0…

数据结构期末复习(5)图

图 在数据结构中,图(Graph)是由节点(Vertex)和边(Edge)组成的一种非线性数据结构。图可以用来表示不同事物之间的关系,比如社交网络中的用户和好友关系、城市之间的道路网络等。 图…

RLC如何通过改变频率实现输出稳压

当开关频率工作在容性区域时,容抗抵消完感抗还有剩余,所以容抗感抗可以近似为一个容抗Cr,但加上频率的改变,容抗又可以近似为一个可调电阻 那又改如何控制频率,保持输出稳压? 当输入与输出电压不变时,Rac变…

编写servlet

编写servlet 上述代码中的HTML页面将雇员ID发送给servlet。要创建servlet读取客户机发送的雇员ID并检索雇员的详细信息,需要执行以下步骤: 在“项目”选项卡中右击“Employee”节点,然后选择“新建”→Servlet。将显示“新建Servlet”对话框。在“类名”文本框中输入Employ…

苹果电脑(Mac)的node版本安装以及升降级

在开发过程中,对于不同的开发环境或者较老的项目可能需要切换不同的node版本,此过程会涉及到node版本的升级与降级,安装node版本管理模块n(sudo命令)。 全局安装n模块 sudo npm install n -g//输入后回车&#xff0c…

国产操作系统:VirtualBox安装openKylin-1.0.1虚拟机并配置网络

国产操作系统:VirtualBox安装openKylin-1.0.1虚拟机并配置网络 openKylin 操作系统目前适配支持X86、ARM、RISC-V三个架构的个人电脑、平板电脑及教育开发板,可以满足绝大多数个人用户及开发者的使用需求。适用于在VirtualBox平台上安装openKylin-1.0.1…

Python语法进阶——类

Python中的数据类型都属于类。int、str、list都是Python定义好的数据类型类。 print(type(list))#<class type> print(type(list()))#<class list> 一、自定义数据类型 一、语法 class 类名():pass #类名 要求首字母大写 #()可写可省略。 #pass在这里只是用来保证…

Unity学习-逐帧图集动画制作

首先在文件部分创建一个Sprite Library Asset 然后点击创建出来的文件 点下面的加号添加对应的图 添加完成之后点一下Apply 然后新建一个物体 添加这三个组件 其中SpriteLibrary里面 把你刚刚创建的图集文件拉过来 Sprite Resolver选择对应的动作和图片 然后开始制作动画 An…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《计及电-气-热综合能源系统的输配协同优化调度》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 这篇文章的标题表明文章将关注于综合能源系统&#xff0c;特别是涉及电力、气体和热能的输配协同优化调度。以下是对标题的一些关键词的解读&#xff1…

Matlab/simulink风储调频,多台飞轮储能调频,风电场调频,飞轮储能带有虚拟惯量和下垂控制,三机九节点系统一次调频,离散模型

上述为不同飞轮储能容量配比&#xff0c;风电场容量配比&#xff0c;以及有无附加频率控制的飞轮储能出力分析。 飞轮储能驱动电机为永磁同步机电机PMSG 有无飞轮储能容量较小&#xff0c;所以对频率的改善效果有限&#xff0c;不过可以继续增大容量&#xff0c;从而增大频率的…

【音视频】基于ffmpeg对视频的切割/合成/推流

背景 基于FFmpeg对视频进行切割、合成和推流的价值和意义在于它提供了一种高效、灵活且免费的方式来实现视频内容的定制、管理和分发。通过FFmpeg&#xff0c;用户可以轻松地剪辑视频片段&#xff0c;根据需要去除不必要的部分或提取特定时间段的内容&#xff0c;从而优化观看…

C#,入门教程(23)——数据类型转换的一点基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(22)——函数的基础知识https://blog.csdn.net/beijinghorn/article/details/124181689 先简单回顾一下&#xff0c;C#的数据类型大致有这样一些&#xff1a; &#xff08;1&#xff09;原始类型&#xff1a;byte, bool, int, doubl…

智慧文旅一机游:科技与文化的完美结合,引领智慧文旅新潮流,智慧旅游未来已来

一、科技与文化的完美结合&#xff1a;智慧文旅一机游的核心理念 智慧文旅一机游&#xff0c;是科技与文化相融合的产物&#xff0c;它不仅代表着旅游行业的创新与发展&#xff0c;更是一种文化与科技完美结合的生活方式。一机游的核心理念在于通过先进的科技手段&#xff0c;提…

IOT pwn

已经过了填坑的黄金时期 环境搭建 交叉编译工具链 很多开源项目需要交叉编译到特定架构上&#xff0c;因此需要安装对应的交叉编译工具链。 sudo apt install gcc-arm-linux-gnueabi g-arm-linux-gnueabi -y sudo apt install gcc-aarch64-linux-gnu g-aarch64-linux-gnu -…

两道日常练习题:洛谷P1165日志分析 + 洛谷P1553 数字反转(升级版)

两道题的代码我都会附着文字详解&#xff0c;并且会简洁说明一下思路&#xff1a; 先看第一套题目&#xff1a; 题干&#xff1a; 输入输出&#xff1a; 数据范围&#xff1a; 这很明显是一道栈的问题&#xff0c;我们只需要根据题意模拟即可&#xff0c;需要注意的是当输入的…

动手做个无人机—材料篇

基于浙江大学Fast-Lab(高飞&#xff0c;潘能)和深蓝学院合作课程&#xff1a;第二课&#xff1a;动力套焊接_哔哩哔哩_bilibili 无人机材料1&#xff1a; 1、NUC 猛虎峡谷 准系统 i5薄款&#xff1a; 一款机载电脑&#xff0c;使用i5-1135G7 &#xff0c;最大内存64G&#xff…

八股文学习日常第一期(20240121)

零、前言 1、目的 帮助掌握面试题&#xff0c;就八股文相关内容展开进行学习和整理&#xff0c;也方便之后的复习和巩固。 2、八股文内容来源 ①https://blog.csdn.net/w20001118/article/details/125724647 一、具体内容分析 1、类的完整书写方式 1.1、类 [Access Mod…