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

news2024/11/20 22:39:59

文章目录

  • 一、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/lib
    LIBS += -llibcrypto
    LIBS += -luser32 -lws2_32
}
linux* {
    LIBS += -lcrypto
}
macx {
    LIBS += -L/usr/local/opt/openssl@3/lib
    LIBS += -lcrypto
}

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

QT += core network

TEMPLATE = lib
CONFIG += c++17

DESTDIR = ../QGIS
CONFIG(debug, debug|release){
    MOC_DIR = ../build-QGIS/ssh2/Debug/moc
    RCC_DIR = ../build-QGIS/ssh2/Debug/rcc
    UI_DIR = ../build-QGIS/ssh2/Debug/ui
    OBJECTS_DIR = ../build-QGIS/ssh2/Debug/obj
}else{
    MOC_DIR = ../build-QGIS/ssh2/Release/moc
    RCC_DIR = ../build-QGIS/ssh2/Release/rcc
    UI_DIR = ../build-QGIS/ssh2/Release/ui
    OBJECTS_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 += ./win
    INCLUDEPATH += D:/Qt/Tools/OpenSSL/Win_x64/include
    INCLUDEPATH += D:/Qt/Tools/OpenSSL/Win_x64/include/openssl
}
linux* {
    INCLUDEPATH += ./linuxmac
    INCLUDEPATH += /opt/Qt/Tools/OpenSSL/src/include
    INCLUDEPATH += /opt/Qt/Tools/OpenSSL/src/include/openssl
}
macx {
    INCLUDEPATH += ./linuxmac
    INCLUDEPATH += /usr/local/opt/openssl@3/include
    INCLUDEPATH += /usr/local/opt/openssl@3/include/openssl
}

#ZLIB路径
INCLUDEPATH += ../zlib-1.2.12
#LIBS
LIBS += -L../QGIS

CONFIG(debug, debug|release){
    LIBS += -lzlibd
}else{
    LIBS += -lzlib
}
win32 {
    LIBS += -LD:/Qt/Tools/OpenSSL/Win_x64/lib
    LIBS += -llibcrypto
    LIBS += -luser32 -lws2_32
}
linux* {
    LIBS += -lcrypto
}
macx {
    LIBS += -L/usr/local/opt/openssl@3/lib
    LIBS += -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.coloradmin.cn/o/1401928.html

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

相关文章

C#winform上位机开发学习笔记2-串口助手的定时发送功能添加

1.功能描述 选择自动发送功能后,按照设定的发送时间发送数据 2.代码部分 增加计时器空间Timer 使能计时器,默认设置定时时间为1秒 组合框设置默认复选信息 编写选择框事件函数 //自动发送事件private void checkBox27_CheckedChanged(object sender, E…

37-WEB漏洞-反序列化之PHPJAVA全解(上)

WEB漏洞-反序列化之PHP&JAVA全解(上) 一、PHP 反序列化原理二、案例演示2.1、无类测试2.1.1、本地2.1.2、CTF 反序列化小真题2.1.3、CTF 反序列化类似题 2.2、有类魔术方法触发2.2.1、本地2.2.2、网鼎杯 2020 青龙大真题 三、参考资料 一、PHP 反序列…

Excel新建文件打开后提示文件扩展名与文件格式不匹配

环境: Win10专业版 excel2016 问题描述: Excel新建文件打开后提示文件扩展名与文件格式不匹配 解决方案: 1.调出注册表编辑器,按层点击文件夹:HKEY_CURRENT_USER/Software/Microsoft/Office/12.0/Excel/Securit…

PSoc62™开发板之rtc时间获取

实验目的 1.使用PSoc62™芯片读取内部rtc时间 2.OLED屏幕显示当前时间戳 实验准备 PSoc62™开发板SSD1306 OLED模块公母头杜邦线 芯片资源 PSoC 6系列MCU时钟系统由以下几部分组成,PSoc62™开发板没有接外部时钟源,所以只能从IMO、ILO、PILO里边配…

Linux 命令大全 CentOS常用运维命令

文章目录 1、Linux 目录结构2、解释目录3、命令详解3.1、shutdown命令3.1、文件目录管理命令ls 命令cd 命令pwd 命令tree 命令mkdir 命令touch 命令cat 命令cp 命令more 命令less 命令head 命令mv 命令rm 命令ln 命令tail 命令cut命令 3.2、用户管理useradd/userdel 命令用户的…

STM32标准库——(2)GPIO输出

1.GPIO简介 GPIO(General Purpose Input Output)通用输入输出口可配置为8种输入输出模式引脚电平:0V~3.3V,部分引脚可容忍5V输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等输入模…

小程序学习-20

建议每次构建npm之前都先删除miniprogram_npm

2024最新版Python 3.12.1安装使用指南

2024最新版Python 3.12.1安装使用指南 Installation and Configuration Guide to the latest version Python 3.12.1 in 2024 By Jackson Python编程语言,已经成为全球最受欢迎的编程语言之一;它简单易学易用,以标准库和功能强大且广泛外挂…

Docker(十)Docker Compose

作者主页: 正函数的个人主页 文章收录专栏: Docker 欢迎大家点赞 👍 收藏 ⭐ 加关注哦! Docker Compose 项目 Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式…

2024PMP考试新考纲-【过程领域】近期典型真题和很详细解析(9)

华研荟继续为您分享【过程Process领域】的新考纲下的真题,帮助大家体会和理解新考纲下PMP的考试特点和如何应用所学的知识和常识(经验)来解题,并且举一反三,一次性3A通过2024年PMP考试。 2024年PMP考试新考纲-【过程领…

智能算法 | Matlab实现改进黑猩猩优化算法SLWCHOA与多个基准函数对比与秩和检验

智能算法 | Matlab实现改进黑猩猩优化算法SLWCHOA与多个基准函数对比与秩和检验 目录 智能算法 | Matlab实现改进黑猩猩优化算法SLWCHOA与多个基准函数对比与秩和检验预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现改进黑猩猩优化算法SLWCHOA与多个基准函数…

Spring Boot3整合Druid(监控功能)

目录 1.前置条件 2.导依赖 错误依赖: 正确依赖: 3.配置 1.前置条件 已经初始化好一个spring boot项目且版本为3X,项目可正常启动。 作者版本为3.2.2最新版 2.导依赖 错误依赖: 这个依赖对于spring boot 3的支持不够&#…

Linux第34步_TF-A移植的第2步_修改设备树和tf-a.tsv

在虚拟机中,使用VSCode打开linux /atk-mp1/atk-mp1/my-tfa/目录下tf-a.code-workspace”; 找到“tf-a-stm32mp-2.2.r1/fdts”目录,就是设备树文件所在的目录。 见下图: 一、修改“stm32mp157d-atk.dts” 修改后,见下…

文件上传笔记整理

文件上传 web渗透的核心,内网渗透的基础 通过上传webshell文件到对方的服务器来获得对方服务器的控制权 成功条件 文件成功上传到对方的服务器(躲过杀软) 知道文件上传的具体路径 上传的文件可以执行成功 文件上传的流程 前端JS对上传文件进行…

python_ACM模式《剑指offer刷题》链表1

题目: 面试tips: 询问面试官是否可以改变链表结构 思路: 1. 翻转链表,再遍历链表打印。 2. 想要实现先遍历后输出,即先进后出,因此可借助栈结构。 3. 可用隐式的栈结构,递归来实现。 代码…

数据库(表的基本操作)

目录 1.1 表的基本操作 1.1.1 创建表 1.1.2 表物理存储结构 1.1.3 数据类型 文本类型: 数字类型: 时间/日期类型: 常用的数据类型: 1.1.4 查看表 SHOW 命令 查看表结构: 1.1.5 删除表 查看表结构&#xf…

一份关于Chrome插件开发指北

目前开发v2版本开发教程可看这里 但目前谷歌浏览器强制要v3,本文主要是总结一些v3跟v2的不同。 为什么迁移到清单V3? 正如Chrome的文档所说: 使用MV3的扩展程序将在安全性、隐私性和性能方面得到增强;它们还可以使用MV3中采用的更现代的开放网络技术,如服务人员和…

三、Flask学习之BootSrap

三、Flask学习之BootSrap Bootstrap 是一款由Twitter团队开发的开源前端框架,它以响应式设计、移动端友好和丰富的组件为特色,为开发者提供了快速构建现代化网站和Web应用的工具。借助其灵活的栅格系统、丰富的UI组件和可定制的样式,Bootstr…

实现自己的mini-react

实现自己的mini-react 创建运行环境实现最简单mini-react渲染dom封装创建虚拟dom节点封装函数封装render函数对齐react 调用方式使用 jsx 任务调度器&fiber架构封装一个workLoop方法 统一提交&实现 function component统一提交实现支持 function component 进军 vdom 的…

Python语法进阶——类

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