在迁移到 NixOS 后,我面对的第一个开发问题是:Magisk 编译不动了 1

众所周知,NixOS 默认并没有安装 linker。这会导致你在执行 Magisk 自带的编译工具链时,出现以下报错信息:

...
Error on executing binary file: No such file or directory
...

实际上,这个报错很具有迷惑性。它其实并不是:

系统找不到你请求执行的可执行文件

而是:

系统找不到动态链接库程序 linker 的可执行文件

详情可参考这个 issue

解决方案也很简单,只要创建一个合适的环境就好了。 buildFHSUserEnv 可以胜任这个工作。

你可以在 我的这个 gist 里找到可以直接使用的成品。将它下载下来,并执行以下指令:

nix-shell magisk.nix

你就可以得到一个完备的 Magisk 开发环境。


  1. 事实上,早期我还未熟悉 NixOS 环境的时候,使用的是基于 LXC 技术的 Debian 容器,来完成编译 Magisk 的任务。然而,容器技术实在是过于重量级。在熟络了 NixOS 后,我便抛弃了这种做法,并顺便写下了这篇文章 :) ↩︎