📂
Qt
  • 【Qt Quick 编程指南】
  • 第一篇 基本应用篇
    • 第1章 Qt Creator简介
      • 1.1 注意事项说明
      • 1.2 Qt Creator 是什么
      • 1.2 IDE集成开发环境准备
      • 1.3 Qt Creator 环境介绍
      • 1.4 Qt工具简介
      • 1.5 Git的使用
    • 第2章 Qt Quick
      • 2.1 Qt Quick 是什么
      • 2.2 Qt Quick 能做什么
      • 2.3 QML支持的平台
      • 2.3 第一个Qt Quick程序
    • 第3章 Hello World
      • 2.1 编写Hello World 程序
      • 2.2 程序的运行与发布
      • 2.3 Hello World程序源码与编译过程详解
      • 2.4 项目模式和项目文件介绍
    • 第4章 窗口部件
      • 3.1 基础窗口部件QWidget
      • 3.2 对话框QDialog
      • 3.3 其他窗口部件
    • 第5章 布局管理
      • 4.1 布局管理系统
      • 4.2 设置伙伴
      • 4.3 设置Tab键顺序
      • 4.4 Qt Creator中的定位器
      • 4.5 案例-登录窗口布局
    • 第6章 应用程序主窗口
      • 5.1 主窗口框架
      • 5.2 富文本处理
      • 5.3 拖放操作
      • 5.4 打印文档
    • 第7章 事件系统
      • 6.1 Qt中的事件
      • 6.2 鼠标事件和滚轮事件
      • 6.4 定时器事件与随机数
      • 6.5 事件过滤器与事件的发送
    • 第8章 Qt对象模型与容器类
      • 7.1 对象模型
      • 7.2 容器类
      • 7.1 对象模型
      • 7.3 正则表达式
      • 7.2 容器类
      • 7.3 正则表达式
    • 第9章 界面外观
      • 8.1 Qt风格
      • 8.2 Qt样式表
      • 8.1 Qt风格
      • 8.3 特殊效果窗体
      • 8.2 Qt样式表
      • 8.3 特殊效果窗口
    • 第10章 国际化、帮助系统与Qt插件
      • 9.1 国际化
      • 9.2 帮助系统
      • 9.3 创建Qt插件
  • 第二篇 图形动画篇
    • 第11章 2D绘图
      • 10.1 基本绘制和填充
      • 10.2 坐标系统
      • 10.3 其他绘制
      • 10.4 双缓冲绘图
      • 10.5 绘图中的其他问题
    • 第12章 图形视图、动画和状态机框架
      • 11.1 图形视图、动画和状态机框架
      • 11.2 图形视图框架的坐标系统和事件
      • 11.3 图形视图框架的其他特性
      • 11.4 动画框架
      • 11.5 状态机框架
    • 第13章 3D绘图
      • 12.1 使用OpenGL绘制图形介绍
      • 12.2 绘制多边形
      • 12.3 绘制彩色3D图形
      • 12.4 使用纹理贴图
  • 第三篇 影音媒体篇
    • 第14章 音视频播放
      • 13.1 播放音频
      • 13.2 播放视频
      • 13.3 QmediaPlayer
    • 第15章 相机和音频录制
      • 14.1 使用相机
      • 14.2 使用音频
  • 第四篇 数据处理篇
    • 第16章 文件、目录和输入/输出
      • 15.1 文件和目录
      • 15.2 文本流和数据流
      • 15.3 其他相关类
    • 第17章 模型/视图编程
      • 16.1 模型/视图架构
      • 16.2 模型类
      • 16.3 视图类
      • 16.4 委托类
      • 16.5 项目视图的便捷类
      • 16.6 在项目视图中启用拖放
    • 第18章 数据库和XML
      • 17.1 数据库
      • 17.2 XML
  • 第五篇 网络通信篇
    • 第19章 网络编程
      • 18.1 网络访问接口
      • 18.2 获取网络接口信息
      • 18.3 UDP
      • 18.4 TCP
    • 第20章 进程和线程
      • 19.1 进程
      • 19.2 线程
    • 第21章 Qt WebEngine
      • 20.1 Qt WebEngine
      • 20.2 基于Qt WebEngine Widget的网页浏览器
  • ※Qt6 QML 实战手册※
    • 第一章 基础设置
      • 1.1 项目注释
      • 1.2 修改程序名字
      • 1.3 程序打包
      • 1.4 Qt Design Studio 结合 Qt Creator使用
      • 1.5 版本控制(GitHub)
    • 第二章 项目文件详解
      • 2.1 CMakeLists.txt
    • 第三章 UI设计
      • 3.1 常用控件大全
    • 第十章 多媒体 Multimedia
    • 异常集合总结
  • ※项目案例※
    • ZSLinux开发
    • DCShell开发
    • DCSft开发
    • Qt程序打包
    • BarTenderPrinter
    • 自动补卡考勤程序
    • 打卡机客户端程序
    • SQL考勤补卡脚本
    • 编译 libssh2
  • 常用知识点总结
    • 【Qt+QML+CMake 开发学习进度】
    • Qt6 开发知识点总结
    • Qt creator 快捷键
    • Qt Design Studio 控件大全
    • QT中添加图片资源文件
    • Qt Creator配合Qt Design Studio
    • 学习参考资料
由 GitBook 提供支持
在本页

这有帮助吗?

  1. ※项目案例※

编译 libssh2

上一页SQL考勤补卡脚本下一页【Qt+QML+CMake 开发学习进度】

最后更新于1个月前

这有帮助吗?

步骤

  1. 安装必要的软件 确保你已经安装了以下软件:

    • (包括C++开发工具)

  2. 下载libssh2源代码 你可以从libssh2的官方GitHub仓库下载源代码:

git clone https://github.com/libssh2/libssh2.git
cd libssh2
  1. 配置和编译libssh2 使用CMake配置和生成Visual Studio项目文件,然后使用Visual Studio编译库:

mkdir build
cd build
cmake -G "Visual Studio 17 2022" -A x64 -DBUILD_SHARED_LIBS=ON ..
  1. 使用Visual Studio编译库 打开生成的Visual Studio解决方案文件(libssh2.sln),选择Release配置,并编译解决方案。这将生成所需的libssh2.dll和libssh2.lib文件。

  2. 将生成的文件复制到项目中 编译完成后,libssh2.dll和libssh2.lib文件将位于build/src/Release/目录中。将这些文件复制到你的项目目录中,例如:

MySSHProject/
├── libssh2/
│   ├── include/
│   │   └── libssh2.h
│   ├── libssh2.lib
│   └── libssh2.dll
├── CMakeLists.txt
├── main.cpp
├── sshclient.cpp
├── sshclient.h
└── main.qml

更新CMakeLists.txt文件

确保你的CMakeLists.txt文件正确配置了libssh2库的包含路径和库文件路径:

cmake_minimum_required(VERSION 3.14)

project(SSHClientDemo LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Qt6 REQUIRED COMPONENTS Quick)

# 设置libssh2库的路径
set(LIBSSH2_DIR ${CMAKE_SOURCE_DIR}/libssh2)

# 添加libssh2库的包含路径和库文件
include_directories(${LIBSSH2_DIR}/include)
link_directories(${LIBSSH2_DIR})

qt_add_executable(SSHClientDemo
    main.cpp
    sshclient.cpp
    sshclient.h
)

# 链接libssh2库
target_link_libraries(SSHClientDemo PRIVATE Qt6::Quick ${LIBSSH2_DIR}/libssh2.lib)

qt_add_qml_module(SSHClientDemo
    URI SSHClient
    VERSION 1.0
    QML_FILES main.qml
)

确保DLL文件在运行时可被找到

将libssh2.dll文件复制到可执行文件所在的目录,或者将其路径添加到系统的PATH环境变量中。这样,运行时系统就可以找到该DLL文件。

通过这些步骤,你应该能够在Windows平台上编译并生成适用于你的项目的libssh2.dll文件,并正确配置CMakeLists.txt文件以链接此库。如果你有任何问题或需要进一步的帮助,请随时告诉我。

如果你已经成功编译了libssh2库,并且在F:\libssh2\build\src\Release目录下找到了libssh2.dll、libssh2.exp、libssh2.lib、和libssh2_static.lib文件,但没有找到libssh2.h头文件,那么你需要从libssh2的源代码中找到并复制头文件。

获取libssh2.h头文件

  1. 找到并复制头文件:

    • 进入libssh2的源代码目录,头文件通常位于include目录或类似的目录中。

    • 复制libssh2.h文件到你的项目目录中的include文件夹。

示例路径

假设libssh2源代码在F:\libssh2\目录下,你可以在F:\libssh2\include\中找到libssh2.h。将其复制到你的项目目录中,例如:

MySSHProject/
├── include/
│   └── libssh2.h
├── libssh2/
│   ├── libssh2.dll
│   ├── libssh2.exp
│   ├── libssh2.lib
│   └── libssh2_static.lib
├── CMakeLists.txt
├── main.cpp
├── sshclient.cpp
├── sshclient.h
└── main.qml

附加解决方案:

删除CMake缓存文件和CMakeFiles目录:

rm -rf CMakeCache.txt CMakeFiles

gemini版本的编译libssh2

好的,请复制以下内容作为您的笔记:

目录结构

D:\src\
├── libssh2\
│   └── libssh2-1.11.1\
│       ├── (libssh2 源代码文件和文件夹,包括 CMakeLists.txt)
│   └── build\
│       ├── (libssh2 构建过程中生成的文件和文件夹)
├── zlib_install\
│   └── zlib-1.3.1\
│       ├── (zlib 源代码文件和文件夹,包括 CMakeLists.txt)
│   └── build\
│       ├── (zlib 构建过程中生成的文件和文件夹)
└── output\
    └── libssh2\
        ├── bin\
        │   └── (可能包含 libssh2 的可执行文件,例如 sftp)
        ├── include\
        │   └── libssh2.h
        │   └── libssh2\
        │       ├── (其他 libssh2 头文件)
        ├── lib\
        │   ├── ssh.lib
        │   └── libssh2.lib
        │   └── (或其他 libssh2 库文件)
        └── CMake\
            └── libssh2\
                ├── libssh2-config.cmake
                └── libssh2-config-version.cmake

Zlib 编译和安装教程 (Windows):

  1. 准备源代码:

    • 确保您已下载 Zlib 源代码并解压到 D:\src\zlib_install\zlib-1.3.1。

  2. 创建构建目录:

mkdir D:\src\zlib_install\build
cd D:\src\zlib_install\build
  1. 配置 CMake:

  • 构建静态库 (推荐):

cmake D:\src\zlib_install\zlib-1.3.1 -G "Visual Studio 17 2022" -A x64 -DCMAKE_INSTALL_PREFIX="D:\src\zlib_install" -DBUILD_SHARED_LIBS=OFF

(将 "Visual Studio 17 2022" 替换为您的 Visual Studio 版本)

  • 构建共享库 (动态库):

cmake D:\src\zlib_install\zlib-1.3.1 -G "Visual Studio 17 2022" -A x64 -DCMAKE_INSTALL_PREFIX="D:\src\zlib_install" -DBUILD_SHARED_LIBS=ON

(将 "Visual Studio 17 2022" 替换为您的 Visual Studio 版本)

  1. 构建 Zlib:

cmake --install . --config Release

(将 Release 替换为 Debug 如果需要调试版本)

libssh2 编译和安装教程 (Windows,依赖已安装的 Zlib 和 OpenSSL):

  1. 准备源代码:

确保您已下载 libssh2 源代码并解压到 D:\src\libssh2\libssh2-1.11.1。

  1. 创建构建目录:

mkdir D:\src\libssh2\build
cd D:\src\libssh2\build
  1. 配置 CMake:

  • 如果 Zlib 构建为静态库:

cmake D:\src\libssh2\libssh2-1.11.1 -G "Visual Studio 17 2022" -A x64 `
-DCMAKE_INSTALL_PREFIX="D:\src\output\libssh2" `
-DCMAKE_BUILD_TYPE=Release `
-DLIBSSH2_BUILD_EXAMPLES=OFF `
-DLIBSSH2_BUILD_TESTING=OFF `
-DLIBSSH2_STATIC_LIB=ON `
-DLIBSSH2_WITH_ZLIB=ON `
-DZLIB_INCLUDE_DIR="D:\src\zlib_install\include" `
-DZLIB_LIBRARY="D:\src\zlib_install\lib\zlibstatic.lib" `
-DLIBSSH2_WITH_OPENSSL=ON `
-DOPENSSL_ROOT_DIR="C:\Program Files\OpenSSL-Win64"

(将 "Visual Studio 17 2022" 替换为您的 Visual Studio 版本)

  • 如果 Zlib 构建为共享库 (动态库):

cmake D:\src\libssh2\libssh2-1.11.1 -G "Visual Studio 17 2022" -A x64 `
-DCMAKE_INSTALL_PREFIX="D:\src\output\libssh2" `
-DCMAKE_BUILD_TYPE=Release `
-DLIBSSH2_BUILD_EXAMPLES=OFF `
-DLIBSSH2_BUILD_TESTING=OFF `
-DLIBSSH2_STATIC_LIB=OFF `
-DLIBSSH2_WITH_ZLIB=ON `
-DZLIB_INCLUDE_DIR="D:\src\zlib_install\include" `
-DZLIB_LIBRARY="D:\src\zlib_install\lib\zlib.lib" `
-DLIBSSH2_WITH_OPENSSL=ON `
-DOPENSSL_ROOT_DIR="C:\Program Files\OpenSSL-Win64"

(将 "Visual Studio 17 2022" 替换为您的 Visual Studio 版本)

  1. 构建 libssh2:

cmake --build . --config Release

(将 Release 替换为 Debug 如果需要调试版本)

  1. 安装 libssh2:

cmake --install . --config Release

(将 Release 替换为 Debug 如果需要调试版本)

DCShell 项目 CMakeLists.txt 配置 (集成已安装的 libssh2):

  1. 修改 find_package(libssh QUIET) 部分为:

find_package(libssh2 REQUIRED CONFIG PATHS "D:/src/output/libssh2/CMake/libssh2")
if(libssh2_FOUND)
    message(STATUS "libssh2 found: ${LIBSSH2_LIBRARIES}")
    message(STATUS "libssh2 include dir: ${LIBSSH2_INCLUDE_DIRS}")
else()
    message(FATAL_ERROR "libssh2 not found. Please check the installation path.")
endif()
  1. 更新 target_include_directories:

target_include_directories(DCShell PRIVATE
    ${LIBSSH2_INCLUDE_DIRS}
    ${OPENSSL_INCLUDE_DIRS}
    "D:/src/vcpkg/installed/x64-windows-static/include" # 如果您仍然需要 vcpkg 的头文件
)
  1. 更新 target_link_libraries:

target_link_libraries(DCShell PRIVATE
    Qt${QT_VERSION_MAJOR}::Widgets
    ${LIBSSH2_LIBRARIES}
    ${OPENSSL_LIBRARIES}
    ws2_32.lib
)

请注意替换命令中的 Visual Studio 版本为您实际使用的版本。完成以上步骤后,您应该能够成功地在您的 DCShell 项目中使用 libssh2 库了。

将 libcrypto-3-x64.dll, libssl-3-x64.dll, 和 zlib.dll 从它们各自的安装/构建目录复制到 D:\src\output\libssh2\bin 目录的 PowerShell 教程

# 设置目标 bin 目录路径
$TargetBinPath = "D:\src\output\libssh2\bin"

# 确保目标 bin 目录存在
if (-not (Test-Path $TargetBinPath -PathType Container)) {
    New-Item -ItemType Directory -Path $TargetBinPath -Force
}

# --- 复制 OpenSSL DLLs ---
# 设置 OpenSSL 的 bin 目录路径 (请根据您的实际安装路径修改)
$OpenSSLBinPath = "C:\Program Files\OpenSSL-Win64\bin"

# 复制 libcrypto-3-x64.dll
$CryptoSource = Join-Path $OpenSSLBinPath "libcrypto-3-x64.dll"
$CryptoDestination = Join-Path $TargetBinPath "libcrypto-3-x64.dll"
if (Test-Path $CryptoSource) {
    Copy-Item $CryptoSource $CryptoDestination -Force
    Write-Host "已复制: $CryptoSource -> $CryptoDestination"
} else {
    Write-Warning "未找到 OpenSSL 加密库: $CryptoSource"
}

# 复制 libssl-3-x64.dll
$SSLSource = Join-Path $OpenSSLBinPath "libssl-3-x64.dll"
$SSLDestination = Join-Path $TargetBinPath "libssl-3-x64.dll"
if (Test-Path $SSLSource) {
    Copy-Item $SSLSource $SSLDestination -Force
    Write-Host "已复制: $SSLSource -> $SSLDestination"
} else {
    Write-Warning "未找到 OpenSSL SSL 库: $SSLSource"
}

# --- 复制 Zlib DLL ---
# 设置 Zlib 的 bin 目录路径 (请根据您的实际构建路径修改)
$ZlibBinPath = "D:\src\zlib_install\bin"
$ZlibFileName = "zlib.dll" # 根据您实际的文件名修改

$ZlibSource = Join-Path $ZlibBinPath $ZlibFileName
$ZlibDestination = Join-Path $TargetBinPath $ZlibFileName
if (Test-Path $ZlibSource) {
    Copy-Item $ZlibSource $ZlibDestination -Force
    Write-Host "已复制: $ZlibSource -> $ZlibDestination"
} else {
    Write-Warning "未找到 Zlib DLL: $ZlibSource。请确保您已构建 Zlib 共享库并检查路径。"
}

Write-Host "DLL 文件复制完成。"

请务必按照以下说明使用此教程:

  1. 打开 Windows PowerShell。

  2. 复制上面的整个代码块。

  3. 粘贴到 PowerShell 窗口中。

  4. 在运行之前,请仔细检查并修改以下变量以匹配您的实际环境:

    • $OpenSSLBinPath: 将 "C:\Program Files\OpenSSL-Win64\bin" 替换为您 OpenSSL 的实际安装 bin 目录。

    • $ZlibBinPath: 将 "D:\src\zlib_install\bin" 替换为您 Zlib 构建输出的 bin 目录。

    • $ZlibFileName: 确认 "zlib.dll" 是您 Zlib 实际生成的 DLL 文件名。如果不是,请修改为正确的文件名(例如 zlibwapi.dll 或带有版本号的名称)。

  5. 按下 Enter 键执行脚本。

脚本执行后,您将在 PowerShell 窗口中看到复制操作的结果。如果一切顺利,libcrypto-3-x64.dll, libssl-3-x64.dll, 和 zlib.dll 将会出现在 D:\src\output\libssh2\bin 目录下。

请记住,这只是一个复制 DLL 文件的临时解决方案。最终,您应该努力配置您的项目以实现真正的静态链接,或者确保这些 DLL 文件在您的应用程序运行时能够被正确地找到(例如,通过 PATH 环境变量或与您的可执行文件放在一起)。

CMake
Visual Studio 2022