思源笔记 Windows on ARM GitHub Action 交叉编译失败简要记录,以及一个 Actions Workflow 里的问题

上课摸鱼,想到上周四浪费了一下午折腾思源笔记的交叉编译,就想着来说一下。如今库已经被我删掉了,也没有代码佐证,只能凭记忆瞎说,还请包涵。

先说动机。我目前手上有一块 Windows on ARM 的板子(具体型号为 Xiaomi Book 12.4 2023),平时主要作为 RDP 终端使用,但也运行浏览器或者 QQ 这样的 light load。考虑到自己买这个板子的一大动机是 随时写作,很自然而然地想到了思源笔记。思源笔记是一个前后端分离的软件,前端是几乎仅作为浏览器使用的 Electron,后端是 Go。二者 按理来说 都是对交叉编译特别友好的。再加上之前也有一个 issue 没有解决。想到这里,那还犹豫什么呢,直接 fork 开干不就得了?

脸被打得很疼。

思源笔记的后端虽然是 Go,但是是 CGO_ENABLED Go。CGO 要求使用一个非 MSVC 编译器来编译源码中的的 C 代码部分。于是很自然地就想到了 MSYS2 MinGW。但是……

图片.png

奇异搞笑的是,gcc 在 Windows on ARM 上完全没有出现过。用 GCC Windows ARM 作为关键词检索,只能找到 Windows 上编译到 Linux ARM 的交叉编译。我找了无数家编译器发行版,tdm、Winlibs、MSYS2,都没有。

因此只能换用隔壁“不那么原教旨”的 Clang 了。他们至少提供交叉编译器。

图片.png

当然这个交叉编译器也不是一个二进制文件,是一个指向 MSYS Clang 的 shell file,是无法被 CGO 调用的。那也只能把里面的命令 cat 出来,然后塞进 CC_FOR_windows_arm64 环境变量里。

c7b5d06fedcda3c25b6038c6479e771d.png

(↑ 从聊天记录翻出来的)

好了,按理来说可以编译了吧?

574bb3809d4d66652c75fe0c4b576124.png

炸的不明不白。看样子还是依赖于 gcc 的样子。 Update: 疑似是因为我没有安装 mingw-w64-cross-clang-headers,有空再试试罢。

中间省略了很多细节,但是总之,最后的最后,还是不明不白地失败了。

图片.png

稍微查看了一下一些 Windows on ARM with CGO 的实践,有说可以采用 Zig 作为交叉编译工具链的,日后可以再试试,现在是真的懒了。

最好的办法,其实还是希望思源能够减少直至抛弃代码库中的 CGO 依赖。这样对整个代码库的 Portability 也有提升。

那讲都讲这么多了,再讲一个探索过程中的问题,关于思源笔记目前的 Actions Workflow 的一个问题:

https://github.com/siyuan-note/siyuan/blob/a75abfb811b63ff2248f66f50201eb59c784249c/.github/workflows/cd.yml#L116

图片.png

第一,这个 MinGW 没有实际作用。MSYS 环境是相对 Windows PATH 独立的。只有 显式声明使用 的时候才会被使用。至于为什么能够编译,那是因为 GitHub Action 的镜像 自带 了 GCC。

第二,打错字了,MingGW -> MinGW。

70f80eca3c58969e9b17a0a3146d1def.jpg

睡觉。

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    18802 引用 • 70339 回帖 • 1 关注
2 操作
ZeroAurora 在 2023-11-29 12:21:23 更新了该帖
ZeroAurora 在 2023-11-29 11:45:51 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 109 关注
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    51 引用 • 226 回帖
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 641 关注
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    138 引用 • 268 回帖 • 192 关注
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    228 引用 • 1450 回帖 • 2 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    116 引用 • 99 回帖 • 266 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    189 引用 • 1056 回帖 • 2 关注
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    207 引用 • 2031 回帖
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    57 引用 • 22 回帖 • 3 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 292 关注
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1083 引用 • 3461 回帖 • 285 关注
  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖 • 1 关注
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    7 引用 • 30 回帖 • 450 关注
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 60 回帖 • 461 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 349 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    41 引用 • 130 回帖 • 292 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3169 引用 • 8207 回帖 • 1 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 42 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 8 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖 • 2 关注
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖 • 12 关注
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    40 引用 • 24 回帖
  • 创业

    你比 99% 的人都优秀么?

    82 引用 • 1398 回帖
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    40 引用 • 40 回帖
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    161 引用 • 473 回帖
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    17 引用 • 236 回帖 • 418 关注
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    22 引用 • 31 回帖 • 3 关注