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 test
和cargo 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 安卓客户端
一级源码目录
.
├── 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 包管理器 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
编译命令
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"