在 Nix 中构建静态二进制文件 —— kokada

作者因近视做了激光眼部手术,术前发现患有干眼症,眼科医生推荐每 20 分钟看 20 英尺外 20 秒的“20 - 20 - 20 规则”。作者难以遵循该规则,起初设置闹钟但很烦,后找程序但未找到多平台替代,于是自己写了twenty-twenty-twenty程序,用 Go 语言编写是为了学习该语言且其便于构建静态二进制文件,最初用beeep能构建静态二进制文件但 macOS 通知难看,后改用GioUInotify库,虽能更好集成 macOS 但失去静态二进制文件,又添加声音和托盘图标功能需在 macOS 和 Linux 中使用 CGO。在 Linux 中失去静态二进制文件是大事,推荐用musl构建,Nix 使其容易,通过创建twenty-twenty-twenty.nix文件可构建 Go 模块,用flake.nix构建,展示 Nix 的强大,正常构建和静态构建仅需更改使用pkgs.pkgsStatic,需给 Go 编译器传递额外标志,测试时出现警告且声音不工作,可能与使用 PipeWire 有关,还提到了交叉编译,通过pkgsCross可轻松实现,如pkgs.pkgsCross.aarch64-multiplatform.pkgsStatic.callPackage可静态交叉编译二进制文件。

阅读 26
0 条评论