Nix包管理器与Termux的链接问题排查
解决Termux上Nix工具的GNU链接器脚本错误
我之前也帮别人排查过类似的Termux+Nix兼容性问题,你遇到的这个错误根源确实是Termux自带的ld链接器无法正确解析Nix生成的GNU链接器脚本,而罪魁祸首就是Termux默认设置的LD_PRELOAD和LD_LIBRARY_PATH环境变量——它们会强制优先加载Termux自身的库,干扰了Nix工具的依赖解析逻辑。
临时修复方案
你已经发现取消这两个变量就能正常运行,直接在终端里执行这两条命令就能临时解决:
unset LD_PRELOAD unset LD_LIBRARY_PATH
执行完之后再运行nix-store、nix-env这些Nix工具,就不会再弹出链接器脚本相关的错误提示了。
持久化配置(不用每次手动操作)
如果不想每次打开终端都重复执行unset命令,可以把这两行加到你的shell配置文件里,一劳永逸:
- 如果你用的是Bash,编辑
~/.bashrc文件 - 如果你用的是Zsh,编辑
~/.zshrc文件
在文件末尾添加这段内容:
# 修复Termux中Nix的链接器脚本兼容性问题 unset LD_PRELOAD unset LD_LIBRARY_PATH
保存后重启终端,或者执行source ~/.bashrc(Bash用户)、source ~/.zshrc(Zsh用户)让配置立即生效。
为什么这个方案有效?
Nix的包都是独立构建的,每个包的依赖链都是自给自足的,完全不依赖系统环境的库文件。去掉Termux的LD_PRELOAD和LD_LIBRARY_PATH变量,就是让Nix工具使用自身打包的链接器和依赖库,从根源上避免了Termux系统库和Nix库的冲突。
内容的提问来源于stack exchange,提问作者Giorgio Mossa




