RustDesk

安全的远程桌面访问

Posted by LXG on October 12, 2024

RustDesk官网

RustDesk 简介

RustDesk 是一款可以平替 TeamViewer 的开源软件,旨在提供安全便捷的自建方案。

ChatGPT-RustDesk技术栈

基于 RustDesk 开源项目进行二次开发,涉及到的技术栈会因为你想要改进或添加的功能而有所不同。RustDesk 是一个远程桌面软件,基于 Rust 编程语言开发,前后端组件都包含。以下是常用的技术栈分类:

1. 编程语言与框架

  • Rust:RustDesk 的核心代码是用 Rust 编写的,因此你需要掌握 Rust 编程语言,尤其是异步编程和并发编程的知识,这在开发网络和系统应用时非常关键。
  • TypeScript/JavaScript:如果你要修改 RustDesk 的前端界面,RustDesk 使用 TypeScript 和 Vue.js 构建前端,因此需要掌握 TypeScript 和相关前端开发工具。
  • Vue.js:RustDesk 的前端使用了 Vue.js 框架,理解它的组件化架构,熟悉 Vue 的基本概念如指令、组件、路由、状态管理(Vuex)等。
  • C/C++(可选):虽然核心是 Rust,但某些底层接口或与系统交互的部分可能使用了 C/C++,对这些语言的基础了解会有帮助。

2. 网络编程

  • TCP/UDP 网络协议:RustDesk 作为远程桌面工具,依赖于网络通信,因此你需要熟悉基础的网络协议(TCP/UDP),以及如何在 Rust 中使用相关的库进行网络通信。
  • WebRTC:如果你需要实现或修改实时视频或音频传输,WebRTC 是一个常用的技术,它允许在网页和原生应用中进行 P2P 传输。

3. 图形界面与用户体验(UI/UX)

  • 前端开发技术:如 HTML、CSS 和 JavaScript,这些都是修改用户界面时必须掌握的技术。
  • 桌面应用开发:如果需要修改桌面应用界面或添加自定义功能,可能需要了解桌面应用 UI 框架,如 GTK、Qt 或 Tauri 等,这些框架可以帮助将 Rust 应用与桌面系统集成。

4. 安全与加密

  • 加密算法:RustDesk 涉及到远程桌面和数据传输,因此需要了解基本的加密技术(如 TLS、SSL、对称加密和非对称加密),确保数据传输的安全性。
  • 身份验证:了解如何集成和改进身份验证机制,如 OAuth、JWT 或自定义的身份认证方案。

5. 操作系统相关知识

  • 跨平台开发:RustDesk 支持多个平台(Windows、macOS、Linux),你可能需要了解如何编写跨平台代码,处理不同操作系统的差异性(如文件系统、进程管理、权限管理等)。
  • 系统编程:某些功能如截屏、音频处理或键盘输入捕获涉及到对操作系统 API 的调用,理解各平台的系统 API(如 Win32、POSIX 等)很重要。

6. 数据库与存储

  • SQLite/其他数据库:如果你计划扩展 RustDesk 的数据存储功能,如用户管理、日志记录等,掌握 SQLite 或其他数据库相关的知识会有所帮助。

7. 测试与调试

  • 测试框架:Rust 自带了一些测试框架,掌握如何编写单元测试、集成测试以及如何进行性能测试是必要的。
  • 调试工具:了解如何使用调试工具,如 GDB、LLDB 或 Rust 的内置工具 cargo testcargo bench

8. DevOps 与部署

  • 容器化(Docker):如果你打算将项目容器化以便于部署和维护,掌握 Docker 和 Docker Compose 的基本知识会有所帮助。
  • 持续集成/持续部署(CI/CD):熟悉如何在 GitHub Actions、Jenkins 等平台上设置 CI/CD 流程,以自动化代码测试和部署。

RustDesk 和 TeamViewer 的对比

特性/参数 RustDesk TeamViewer
开源与闭源 开源(GPL-3.0许可证) 闭源,商业软件
平台支持 Windows、macOS、Linux、Android、iOS Windows、macOS、Linux、Android、iOS
使用费用 免费(可以自行部署) 商业订阅,提供免费版本(功能有限)
功能 基本远程桌面功能,文件传输,画面共享 远程控制、文件传输、在线会议、远程打印、设备管理
自托管选项 支持自托管(需要自行搭建服务器) 不支持自托管,依赖 TeamViewer 的云服务器
易用性 简单易用,但需要一些设置 用户友好,开箱即用
安全性 使用 AES 256 位加密,支持自定义密钥 使用 TLS 和 AES 加密,企业级安全性
性能 性能较好,适合家庭和小型企业使用 在大型企业和高并发场景中表现优秀
插件与扩展 有一定的社区支持,插件相对较少 提供多种集成和插件
技术支持 社区支持,缺乏正式的技术支持 提供官方技术支持

RustDesk 安卓客户端

RustDesk 文档

RustDesk andsroid 编译

客户端源码

一级源码目录


.
├── appimage          # 用于生成 AppImage 格式的 Linux 应用包相关文件
├── build.py          # Python 构建脚本,用于自动化构建或打包任务
├── build.rs          # Rust 的构建脚本,用于编译前的代码生成或任务处理
├── Cargo.lock        # Rust 项目的依赖锁文件,记录具体的依赖版本
├── Cargo.toml        # Rust 项目的配置文件,定义依赖、元数据和编译选项
├── Dockerfile        # 定义 Docker 镜像构建步骤的文件,用于容器化部署
├── docs              # 存放项目文档的目录,包括开发者或用户手册
├── entrypoint.sh     # 容器启动时执行的入口脚本,用于初始化或启动服务
├── examples          # Rust 项目的示例代码,展示如何使用项目的功能
├── fastlane          # Fastlane 文件,用于移动应用的自动化发布流程
├── flatpak           # Flatpak 打包配置文件,针对 Linux 平台的应用打包
├── flutter           # Flutter 相关目录,可能包含跨平台 UI 代码
├── libs              # 项目自定义库或外部依赖库的目录
├── LICENCE           # 项目的开源许可证文件,定义版权和使用条款
├── README.md         # 项目介绍文件,包含基本信息和使用说明
├── res               # 资源文件目录,存放图标、配置等静态资源
├── src               # 项目的源代码目录,包含核心逻辑和功能模块
├── vcpkg.json        # vcpkg 包管理器的配置文件,用于管理 C++ 库依赖
└── vdi               # VDI(虚拟桌面基础设施)相关文件或配置目录

src目录


.
├── auth_2fa.rs                    # 处理两因素身份验证(2FA)相关逻辑的 Rust 文件
├── client                         # 客户端相关代码的目录,包含远程控制客户端逻辑
├── client.rs                      # 客户端的核心模块,处理客户端的主要功能
├── clipboard_file.rs              # 处理剪贴板文件传输功能的模块
├── clipboard.rs                   # 剪贴板的核心逻辑,处理文本和图像的复制粘贴
├── cli.rs                         # 命令行接口(CLI)相关的代码,实现命令行交互
├── common.rs                      # 项目中通用功能和公用模块
├── core_main.rs                   # 核心逻辑的入口点,可能与主流程相关
├── custom_server.rs               # 自定义服务器逻辑,实现特定服务端功能
├── flutter_ffi.rs                 # 与 Flutter 的 FFI(外部函数接口)互操作相关的代码
├── flutter.rs                     # 与 Flutter 框架相关的其他代码模块
├── hbbs_http                      # HTTP 服务器实现的相关目录,可能用于处理通信
├── hbbs_http.rs                   # 处理 HTTP 请求和通信的 Rust 文件
├── ipc.rs                         # 进程间通信(IPC)实现,用于不同进程之间的数据交换
├── keyboard.rs                    # 处理键盘输入和事件的模块
├── lang                           # 多语言支持目录,存放不同语言文件
├── lang.rs                        # 多语言功能的实现,处理语言选择和翻译
├── lan.rs                         # 局域网(LAN)相关的功能和逻辑
├── lib.rs                         # 项目库的主要入口文件,定义了库的公共接口
├── main.rs                        # 项目的主入口,程序的启动点
├── naming.rs                      # 处理命名或标识相关逻辑的模块
├── platform                       # 平台相关代码的目录,处理特定平台(如 Windows、Linux 等)差异
├── plugin                         # 插件系统相关的代码,支持扩展功能
├── port_forward.rs                # 处理端口转发逻辑的模块
├── privacy_mode                   # 隐私模式相关的逻辑目录
├── privacy_mode.rs                # 隐私模式的实现,处理与隐私相关的功能
├── rendezvous_mediator.rs         # 中继服务器(rendezvous mediator)逻辑,处理 P2P 连接中介
├── server                         # 服务端相关代码的目录,处理远程桌面服务端逻辑
├── server.rs                      # 服务端的核心模块,包含服务端的主要功能
├── tray.rs                        # 系统托盘图标相关逻辑,实现托盘菜单和交互
├── ui                             # 用户界面(UI)相关代码的目录,可能包括前端组件
├── ui_cm_interface.rs             # UI 的上下文菜单接口,实现上下文交互功能
├── ui_interface.rs                # 用户界面的接口,定义 UI 与其他部分的交互
├── ui.rs                          # 用户界面的核心实现文件
├── ui_session_interface.rs        # 用户界面的会话接口,管理会话相关的交互
└── virtual_display_manager.rs     # 虚拟显示器管理器,处理虚拟桌面和多显示器支持

flutter目录


.
├── analysis_options.yaml       # Dart 代码的分析选项文件,用于定义代码静态分析的规则
├── android                     # 与 Android 平台相关的项目目录,包含 Android 的原生代码和配置
├── assets                      # 资源文件目录,存放图片、字体等应用的静态资源
├── build_android_deps.sh       # 构建 Android 依赖的脚本,自动处理 Android 构建过程中的依赖安装
├── build_android.sh            # 用于编译 Android 版本应用的构建脚本
├── build_fdroid.sh             # 构建 F-Droid 版本的脚本,F-Droid 是一个开源 Android 应用商店
├── build_ios.sh                # 用于编译 iOS 版本应用的构建脚本
├── deploy.sh                   # 部署应用的脚本,可能用于将应用部署到各个平台
├── ios                         # 与 iOS 平台相关的项目目录,包含 iOS 的原生代码和配置
├── ios_arm64.sh                # 针对 iOS ARM64 架构设备(如 iPhone)的构建脚本
├── ios_x64.sh                  # 针对 iOS x64 架构的构建脚本(适用于模拟器等)
├── lib                         # Flutter 项目的核心目录,存放 Dart 代码和 UI 逻辑
├── linux                       # 与 Linux 平台相关的项目目录,包含 Linux 的原生代码和配置
├── macos                       # 与 macOS 平台相关的项目目录,包含 macOS 的原生代码和配置
├── ndk_arm64.sh                # 针对 Android ARM64 架构使用 NDK(Native Development Kit)构建的脚本
├── ndk_arm.sh                  # 针对 Android ARM 架构使用 NDK 构建的脚本
├── ndk_x64.sh                  # 针对 Android x64 架构使用 NDK 构建的脚本
├── ndk_x86.sh                  # 针对 Android x86 架构使用 NDK 构建的脚本
├── pubspec.lock                # Dart 的依赖锁文件,记录项目的具体依赖版本
├── pubspec.yaml                # Flutter 项目的配置文件,定义了依赖项、资源、版本等
├── README.md                   # 项目说明文件,通常包含项目介绍和使用指南
├── run.sh                      # 启动项目或执行某些任务的脚本
├── test                        # 测试代码目录,包含 Dart 单元测试或集成测试代码
├── web                         # 与 Web 平台相关的项目目录,包含 Web 的前端代码
└── windows                     # 与 Windows 平台相关的项目目录,包含 Windows 的原生代码和配置


android目录


├── app                             # Android 应用的主要目录,包含应用的 Gradle 配置、源码和资源文件
│   ├── build.gradle                # Android 应用模块的 Gradle 构建脚本,定义构建配置、依赖等
│   ├── proguard-rules              # ProGuard 混淆规则文件,定义代码混淆和优化策略
│   └── src                         # Android 应用的源代码目录
│       ├── debug                   # 专用于 debug 构建的 AndroidManifest 文件,用于调试版本的配置
│       │   └── AndroidManifest.xml # debug 模式下的 Android 应用的配置文件
│       ├── main                    # 主代码目录,包含应用的核心功能和资源
│       │   ├── AndroidManifest.xml # 应用的主要 AndroidManifest 文件,定义应用的组件、权限等
│       │   ├── kotlin              # Kotlin 语言编写的 Android 应用源代码
│       │   │   ├── com             # 代码包的层级,通常根据域名组织
│       │   │   │   └── carriez
│       │   │   │       └── flutter_hbb # 应用包名
│       │   │   │           ├── AudioRecordHandle.kt              # 处理音频录制的功能类
│       │   │   │           ├── BootReceiver.kt                   # 处理设备启动时的广播接收器
│       │   │   │           ├── common.kt                         # 通用功能和工具函数
│       │   │   │           ├── FloatingWindowService.kt          # 实现悬浮窗功能的服务
│       │   │   │           ├── InputService.kt                   # 处理输入事件的服务
│       │   │   │           ├── KeyboardKeyEventMapper.kt         # 处理键盘按键事件映射的类
│       │   │   │           ├── MainActivity.kt                   # 应用的主活动(入口点)
│       │   │   │           ├── MainService.kt                    # 应用的主要后台服务
│       │   │   │           ├── PermissionRequestTransparentActivity.kt # 请求权限时的透明活动
│       │   │   │           └── VolumeController.kt               # 处理音量控制的类
│       │   └── ffi.kt              # FFI(外部函数接口)相关的代码,与外部库进行交互
│       └── res                     # Android 应用的资源文件目录,存放布局、图片、字符串等资源
│           ├── drawable            # 普通的可绘制资源(如图标、背景)
│           ├── drawable-v21        # 适用于 Android 21 及以上版本的可绘制资源
│           ├── mipmap-anydpi-v26   # 适用于任何屏幕密度的 mipmap 图标资源(v26 及以上)
│           ├── mipmap-hdpi         # 高分辨率图标资源(hdpi)
│           ├── mipmap-mdpi         # 中分辨率图标资源(mdpi)
│           ├── mipmap-xhdpi        # 超高分辨率图标资源(xhdpi)
│           ├── mipmap-xxhdpi       # 超超高分辨率图标资源(xxhdpi)
│           ├── mipmap-xxxhdpi      # 超超超高分辨率图标资源(xxxhdpi)
│           ├── values              # 存放应用的各种值资源(如颜色、字符串)
│           ├── values-night        # 夜间模式下的值资源(如夜间主题的颜色)
│           └── xml                 # 存放 XML 配置文件(如权限文件、网络安全配置等)
│       └── profile                 # 专用于 profile 构建的 AndroidManifest 文件,用于性能分析版本
│           └── AndroidManifest.xml # profile 模式下的应用配置文件
├── build.gradle                    # 项目级别的 Gradle 构建脚本,包含全局的构建配置
├── flutter_hbb_android.iml         # IntelliJ/Android Studio 的项目模块文件,用于 IDE 的项目配置
├── gradle                          # Gradle 构建工具的相关配置文件和脚本
│   └── wrapper                     # Gradle Wrapper 文件,确保使用特定版本的 Gradle 构建项目
│       └── gradle-wrapper.properties # Gradle Wrapper 的配置文件,定义 Gradle 版本和下载路径
├── gradle.properties               # Gradle 构建属性文件,定义全局构建属性(如 JVM 参数)
└── settings.gradle                 # Gradle 项目设置文件,定义了项目中包含的模块

rust-mobile 项目

rust-mobile

android rust-AOSP

Rust 包管理器 cargo安装

安装Rust环境

curl –proto ‘=https’ –tlsv1.2 -sSf https://sh.rustup.rs | sh source $HOME/.cargo/env

安装cargo-ndk

cargo install cargo-ndk

Ubuntu 22.04 安装flutter环境

开始在 Linux 上构建 Flutter Android 应用程序

ln -s /home/lxg/code/github/rust/vcpkg/vcpkg /usr/local/bin/vcpkg

编译命令

安卓编译

安卓编译-EN


VCPKG_ROOT=$HOME/vcpkg ANDROID_NDK_HOME=/home/lxg/Android/android-ndk-r26c-linux/android-ndk-r26c flutter/ndk_arm64.sh

VCPKG_ROOT=$HOME/vcpkg ANDROID_NDK_HOME=/home/lxg/code/github/rust/android-ndk-r23c flutter/ndk_arm64.sh

编译报错-1


lxg@lixiaogang:~/code/github/rust/rustdesk$ VCPKG_ROOT=$HOME/vcpkg ANDROID_NDK_HOME=/home/lxg/code/github/rust/android-ndk-r23c flutter/ndk_arm64.sh

error: failed to run custom build command for `scrap v0.5.0 (/home/lxg/code/github/rust/rustdesk/libs/scrap)`

Caused by:
  process didn't exit successfully: `/home/lxg/code/github/rust/rustdesk/target/release/build/scrap-9b985712a00a8e3d/build-script-build` (exit status: 101)
  --- stdout
  cargo:rerun-if-env-changed=NO_PKG_CONFIG_libyuv
  cargo:info=arm64-android
  cargo:rustc-link-lib=static=yuv
  cargo:rustc-link-search=/home/lxg/vcpkg/installed/arm64-android/lib
  cargo:include=/home/lxg/vcpkg/installed/arm64-android/include
  cargo:rerun-if-env-changed=NO_PKG_CONFIG_libvpx
  cargo:info=arm64-android
  cargo:rustc-link-lib=static=vpx
  cargo:rustc-link-search=/home/lxg/vcpkg/installed/arm64-android/lib
  cargo:include=/home/lxg/vcpkg/installed/arm64-android/include
  rerun-if-changed=/home/lxg/code/github/rust/rustdesk/libs/scrap/src/bindings/vpx_ffi.h
  rerun-if-changed=/home/lxg/vcpkg/installed/arm64-android/include

  --- stderr
  /home/lxg/code/github/rust/rustdesk/libs/scrap/src/bindings/vpx_ffi.h:1:10: fatal error: 'vpx/vp8.h' file not found
  thread 'main' panicked at libs/scrap/build.rs:169:18:
  called `Result::unwrap()` on an `Err` value: ClangDiagnostic("/home/lxg/code/github/rust/rustdesk/libs/scrap/src/bindings/vpx_ffi.h:1:10: fatal error: 'vpx/vp8.h' file not found\n")
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
warning: build failed, waiting for other jobs to finish...

解决方案-1

sudo apt install libvpx-dev

编译报错-2


error: failed to run custom build command for `magnum-opus v0.4.0 (https://github.com/rustdesk-org/magnum-opus#5cd2bf98)`

Caused by:
  process didn't exit successfully: `/home/lxg/code/github/rust/rustdesk/target/release/build/magnum-opus-e2e056e0893ecaed/build-script-build` (exit status: 101)
  --- stdout
  cargo:info=arm64-android
  cargo:rustc-link-lib=static=opus
  cargo:rustc-link-search=/home/lxg/vcpkg/installed/arm64-android/lib
  cargo:include=/home/lxg/vcpkg/installed/arm64-android/include
  rerun-if-changed=/home/lxg/.cargo/git/checkouts/magnum-opus-6f07f61b97016ae9/5cd2bf9/opus_ffi.h
  rerun-if-changed=/home/lxg/vcpkg/installed/arm64-android/include

  --- stderr
  /home/lxg/.cargo/git/checkouts/magnum-opus-6f07f61b97016ae9/5cd2bf9/opus_ffi.h:1:10: fatal error: 'opus/opus_multistream.h' file not found
  /home/lxg/.cargo/git/checkouts/magnum-opus-6f07f61b97016ae9/5cd2bf9/opus_ffi.h:1:10: fatal error: 'opus/opus_multistream.h' file not found, err: true
  thread 'main' panicked at /home/lxg/.cargo/git/checkouts/magnum-opus-6f07f61b97016ae9/5cd2bf9/build.rs:146:18:
  called `Result::unwrap()` on an `Err` value: ()
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

解决方案=2

sudo apt install libvpx-dev

编译报错-3


error: failed to run custom build command for `scrap v0.5.0 (/home/lxg/code/github/rust/rustdesk/libs/scrap)`

Caused by:
  process didn't exit successfully: `/home/lxg/code/github/rust/rustdesk/target/release/build/scrap-9b985712a00a8e3d/build-script-build` (exit status: 101)
  --- stdout
  cargo:rerun-if-env-changed=NO_PKG_CONFIG_libyuv
  cargo:info=arm64-android
  cargo:rustc-link-lib=static=yuv
  cargo:rustc-link-search=/home/lxg/vcpkg/installed/arm64-android/lib
  cargo:include=/home/lxg/vcpkg/installed/arm64-android/include
  cargo:rerun-if-env-changed=NO_PKG_CONFIG_libvpx
  cargo:info=arm64-android
  cargo:rustc-link-lib=static=vpx
  cargo:rustc-link-search=/home/lxg/vcpkg/installed/arm64-android/lib
  cargo:include=/home/lxg/vcpkg/installed/arm64-android/include
  rerun-if-changed=/home/lxg/code/github/rust/rustdesk/libs/scrap/src/bindings/vpx_ffi.h
  rerun-if-changed=/home/lxg/vcpkg/installed/arm64-android/include
  cargo:rerun-if-env-changed=NO_PKG_CONFIG_aom
  cargo:info=arm64-android
  cargo:rustc-link-lib=static=aom
  cargo:rustc-link-search=/home/lxg/vcpkg/installed/arm64-android/lib
  cargo:include=/home/lxg/vcpkg/installed/arm64-android/include
  rerun-if-changed=/home/lxg/code/github/rust/rustdesk/libs/scrap/src/bindings/aom_ffi.h
  rerun-if-changed=/home/lxg/vcpkg/installed/arm64-android/include

  --- stderr
  /home/lxg/code/github/rust/rustdesk/libs/scrap/src/bindings/aom_ffi.h:1:10: fatal error: 'aom/aom.h' file not found
  thread 'main' panicked at libs/scrap/build.rs:169:18:
  called `Result::unwrap()` on an `Err` value: ClangDiagnostic("/home/lxg/code/github/rust/rustdesk/libs/scrap/src/bindings/aom_ffi.h:1:10: fatal error: 'aom/aom.h' file not found\n")
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

解决方案-3

sudo apt install libaom-dev

sudo apt install libyuv-dev

编译报错-4


   Compiling magnum-opus v0.4.0 (https://github.com/rustdesk-org/magnum-opus#5cd2bf98)
warning: `hbb_common` (lib) generated 3 warnings (1 duplicate)
error: could not find native static library `opus`, perhaps an -L flag is missing?

error: could not compile `magnum-opus` (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...
The following warnings were emitted during compilation:


解决方案-4

sudo apt install libopus-dev


lxg@lixiaogang:~/code/github/rust/rustdesk$ git diff flutter/ndk_arm64.sh
diff --git a/flutter/ndk_arm64.sh b/flutter/ndk_arm64.sh
index e7c43582b..3e11849b7 100755
--- a/flutter/ndk_arm64.sh
+++ b/flutter/ndk_arm64.sh
@@ -1,2 +1,5 @@
 #!/usr/bin/env bash
+
+export RUSTFLAGS="-L /usr/lib/x86_64-linux-gnu"
+
 cargo ndk --platform 21 --target aarch64-linux-android build --release --features flutter,hwcodec

编译报错-5


error: failed to run custom build command for `hwcodec v0.7.0 (https://github.com/rustdesk-org/hwcodec#f74410ed)`

Caused by:
  process didn't exit successfully: `/home/lxg/code/github/rust/rustdesk/target/release/build/hwcodec-bf38a7543bf63d86/build-script-build` (exit status: 1)


编译报错-6


error: linking with `/home/lxg/.cargo/bin/cargo-ndk` failed: exit status: 1
  |
  = note: LC_ALL="C" PATH="/home/lxg/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/bin:/home/lxg/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/bin:/home/lxg/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/bin:/home/lxg/bin:/root/.local/bin:/home/tools/gn:/home/tools/node-v14.15.4-linux-x64/bin:/home/tools/ninja:/home/tools/gcc_riscv32/bin:/home/tools/hc-gen:/home/tools/llvm/bin:/usr/local/arm-toolchain/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabi/bin/:~/development/flutter/bin:/home/lxg/bin:/root/.local/bin:/home/tools/gn:/home/tools/node-v14.15.4-linux-x64/bin:/home/tools/ninja:/home/tools/gcc_riscv32/bin:/home/tools/hc-gen:/home/tools/llvm/bin:/usr/local/arm-toolchain/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabi/bin/:/home/lxg/bin:/root/.local/bin:/home/tools/gn:/home/tools/node-v14.15.4-linux-x64/bin:/home/tools/ninja:/home/tools/gcc_riscv32/bin:/home/tools/hc-gen:/home/tools/llvm/bin:/usr/local/arm-toolchain/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabi/bin/:/home/lxg/.cargo/bin:/home/lxg/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/lxg/system/android-studio-2024.1.2.12-linux/android-studio/bin:/home/lxg/system/android-studio-2024.1.2.12-linux/android-studio/bin:/home/lxg/system/android-studio-2024.1.2.12-linux/android-studio/bin:/home/lxg/system/flutter_linux_3.24.3-stable/flutter/bin" VSLANG="1033" "/home/lxg/.cargo/bin/cargo-ndk" "-Wl,--version-script=/tmp/rustc0bvpcC/list" "-Wl,--no-undefined-version" "/tmp/rustc0bvpcC/symbols.o" "/home/lxg/code/github/rust/rustdesk/target/aarch64-linux-android/release/deps/rustls_platform_verifier-299163d4f9b2f738.rustls_platform_verifier.332222f808cd5ad1-cgu.0.rcgu.o" "/home/lxg/code/github/rust/rustdesk/target/aarch64-linux-android/release/deps/rustls_platform_verifier-299163d4f9b2f738.2wzdnxjwa1o4sfhlbi5650wtp.rcgu.o" "-Wl,--as-needed" "-L" "/home/lxg/code/github/rust/rustdesk/target/aarch64-linux-android/release/deps" "-L" "/home/lxg/code/github/rust/rustdesk/target/release/deps" "-L" "/usr/lib/x86_64-linux-gnu" "-L" "/home/lxg/code/github/rust/rustdesk/target/aarch64-linux-android/release/build/ring-6dca1a2a881511ab/out" "-L" "/home/lxg/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib" "-Wl,-Bstatic" "/home/lxg/code/github/rust/rustdesk/target/aarch64-linux-android/release/deps/libjni-e85642f28ceb2731.rlib" "/home/lxg/code/github/rust/rustdesk/target/aarch64-linux-android/release/deps/libcesu8-5cc9219be1251769.rlib" "/home/lxg/code/github/rust/rustdesk/target/aarch64-linux-android/release/deps/libcombine-c4b43d82edee82cb.rlib" "/home/lxg/code/github/rust/rustdesk/target/aarch64-linux-android/release/deps/libmemchr-18012647194e1751.rlib" "/home/lxg/code/github/rust/rustdesk/target/aarch64-linux-android/release/deps/libbytes-464f28d5c704db38.rlib" "/home/lxg/code/github/rust/rustdesk/target/aarch64-linux-android/release/deps/libserde-6bbb7db7e75dc9dd.rlib" "/home/lxg/code/github/rust/rustdesk/target/aarch64-linux-android/release/deps/libthiserror-91b036058631fdc4.rlib" "/home/lxg/code/github/rust/rustdesk/target/aarch64-linux-android/release/deps/libjni_sys-fc598e35d573aecf.rlib" "/home/lxg/code/github/rust/rustdesk/target/aarch64-linux-android/release/deps/librustls-0891c9d618411b31.rlib" "/home/lxg/code/github/rust/rustdesk/target/aarch64-linux-android/release/deps/libsubtle-d55875b087119a5a.rlib" "/home/lxg/code/github/rust/rustdesk/target/aarch64-linux-android/release/deps/libwebpki-8d2a1fa97a1a2353.rlib" "/home/lxg/code/github/rust/rustdesk/target/aarch64-linux-android/release/deps/libring-ea9ae5f8d5caa5e4.rlib" "/home/lxg/code/github/rust/rustdesk/target/aarch64-linux-android/release/deps/libgetrandom-f423ae6a42fd73d0.rlib" "/home/lxg/code/github/rust/rustdesk/target/aarch64-linux-android/release/deps/libspin-73d8ee2a34c7e500.rlib" "/home/lxg/code/github/rust/rustdesk/target/aarch64-linux-android/release/deps/libuntrusted-f98a625d8f65f24a.rlib" "/home/lxg/code/github/rust/rustdesk/target/aarch64-linux-android/release/deps/libcfg_if-ef690e849cfd1b4e.rlib" "/home/lxg/code/github/rust/rustdesk/target/aarch64-linux-android/release/deps/liblibc-84d475744b61a960.rlib" "/home/lxg/code/github/rust/rustdesk/target/aarch64-linux-android/release/deps/libonce_cell-2376aed713b7e3bf.rlib" "/home/lxg/code/github/rust/rustdesk/target/aarch64-linux-android/release/deps/libzeroize-0ac38f52af93f184.rlib" "/home/lxg/code/github/rust/rustdesk/target/aarch64-linux-android/release/deps/librustls_pki_types-a1b8e4c5d216b5d2.rlib" "/home/lxg/code/github/rust/rustdesk/target/aarch64-linux-android/release/deps/liblog-fb71ff670fedf8e8.rlib" "/home/lxg/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libstd-cd8cf752a443bb6b.rlib" "/home/lxg/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libpanic_abort-6ae445a64bd11847.rlib" "/home/lxg/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libobject-87dfb59ed1d0e844.rlib" "/home/lxg/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libmemchr-f6a3cc7440d6c389.rlib" "/home/lxg/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libaddr2line-b1ed2427e48dbda9.rlib" "/home/lxg/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libgimli-d1389e4793ad1141.rlib" "/home/lxg/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/librustc_demangle-5219845fa558113e.rlib" "/home/lxg/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libstd_detect-df91b4e11ae96982.rlib" "/home/lxg/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libhashbrown-85a1f3a80782dd9e.rlib" "/home/lxg/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/librustc_std_workspace_alloc-4a3efcd274d5e091.rlib" "/home/lxg/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libminiz_oxide-8efdf77349e945dd.rlib" "/home/lxg/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libadler-cdaccf425c783b3b.rlib" "/home/lxg/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libunwind-a17e367fa3c7c2a0.rlib" "/home/lxg/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libcfg_if-368aea0b000bf3b5.rlib" "/home/lxg/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/liblibc-fb769c14a5a63149.rlib" "/home/lxg/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/liballoc-a768099b441d9b42.rlib" "/home/lxg/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/librustc_std_workspace_core-0ef962ff48c5f202.rlib" "/home/lxg/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libcore-40ed66a75889e813.rlib" "/home/lxg/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libcompiler_builtins-629edfb390a8f42e.rlib" "-Wl,-Bdynamic" "-ldl" "-llog" "-lunwind" "-ldl" "-lm" "-lc" "-Wl,--eh-frame-hdr" "-Wl,-z,noexecstack" "-L" "/home/lxg/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib" "-o" "/home/lxg/code/github/rust/rustdesk/target/aarch64-linux-android/release/deps/librustls_platform_verifier-299163d4f9b2f738.so" "-Wl,--gc-sections" "-shared" "-Wl,-soname=librustls_platform_verifier-299163d4f9b2f738.so" "-Wl,-z,relro,-z,now" "-Wl,-O1" "-Wl,--strip-all" "-nodefaultlibs" "-Wl,-rpath,$ORIGIN/../../../../../../../../.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib" "-Wl,--enable-new-dtags" "-Wl,-z,origin"
  = note: ld: error: --fix-cortex-a53-843419 is only supported on AArch64 targets
          clang-12: error: linker command failed with exit code 1 (use -v to see invocation)
          

error: could not compile `rustls-platform-verifier` (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...
note: If the build failed due to a missing target, you can run this command:
note: 
note:     rustup target install aarch64-linux-android

这个错误信息表明,链接器(ld)和 clang 试图应用 –fix-cortex-a53-843419 选项,但这个选项仅在 AArch64 架构上受支持。它表明当前的链接器配置不正确,可能是在非 AArch64 目标上使用了该选项。

替换成国内镜像源

vim ~/.cargo/config.toml


[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"
# 中科大镜像源
replace-with = 'ustc'
# 中科大
[source.ustc]
registry = "https://mirrors.ustc.edu.cn/crates.io-index"