Skip to content

我们的工作习惯

Avimitin edited this page Jun 18, 2022 · 7 revisions

不是让软件能出包就算修复,对于 Patch 的内容我们有着一些不成文的约定。你可以在这篇文章中了解我们以往对某个错误的通用修复方式,也可以了解我们的一些要求。

Rust

error: failed to run rustc to learn about target-specific information

解决方案:删除 PKGBUILD 里的 --target "$CARCH-unknown-linux-gnu" 参数

error: failed to run custom build command for ring v0.16.20

解决方案:使用肥猫 patch 后的 ring。在 PKGBUILD 的 prepare 函数(如果没有这个函数就自己加上)内加入下面两行:

echo -e "\n[patch.crates-io]\nring = { git = 'https://github.com/felixonmars/ring', branch = '0.16.20' }" >> Cargo.toml
cargo update -p ring

无法编译 jemallocator 这个依赖

解决方案:给上游发 PR,把 jemallocator 这个 crate 换成 tikv-jemallocator。

参考 PR:

在 QEMU-user 里编译 Rust 程序卡住了

打开 htop,摁 F4 搜索编译程序的名字,可以用方向键移动。在 S 那一列里查看应用状态,如果是 Z,即 Zombie 僵尸状态,说明编译程序卡死了,需要杀掉重开。选上这个程序之后按 k 键,左侧会弹出 Send Signal 窗口,选择 SIGABRT 信号并回车,程序就会被干掉了,然后你再重试。

Golang

替换依赖

编辑 go.mod,用 replace 语法进行替换(可以放在文件最后面)。

例子:把 modernc.org/libc 的 v1.4.1 版本升到 v1.14.11 版本

replace modernc.org/libc v1.4.1 => modernc.org/libc v1.14.11

然后把这个修改生成出 patch,在 PKGBUILD 的 prepare 函数里添加:

patch -Ni ../fix-libc.patch
go get -d modernc.org/libc

最后把 riscv64.patch 和修改的 patch 放在一起,提交 PR。

C/C++

config.guess: unable to guess system type

解决方案:

  1. 首先向上游汇报他们的 config.guessconfig.sub 文件过老。
  2. 然后在 PKGBUILD 里尝试使用 autoreconf -fi 命令来更新 config.guess
  3. 如果上游的 config.guess 文件已经老到无法更新,将 /usr/share/autoconf/build-aux/ 目录下的 config.guessconfig.sub 文件拷贝到本地。
  4. 提交 PR,并附带上你的上游汇报链接。
  5. 持续跟踪你的上游报告,上游更新完并发版之后删除 patch。

undefined reference to __atomic_exchange_1

具体参考: https://blog.jiejiss.com/A-RISC-V-gcc-pitfall-revealed-by-a-glibc-update/

Clone this wiki locally