![处理 NixOS 缺少依赖项 ~ libpng-dev](https://linux22.com/image/143376/%E5%A4%84%E7%90%86%20NixOS%20%E7%BC%BA%E5%B0%91%E4%BE%9D%E8%B5%96%E9%A1%B9%20~%20libpng-dev.png)
远离像 Arch 这样的操作系统,其中大部分软件包都是可用的,如何处理缺少的开发依赖项,例如libpng-dev
?
我有一个 Node 包依赖问题 - pngquant-bin
。它依赖libpng-dev
包来构建 pngquant-bin。libpng
&pngquant
在 Nixpkgs 中都可用,但它正在尝试查找libpng-dev
.
在这种情况下最好的解决方案是什么?例如设置覆盖、从源创建包......
研究:
使用libpng-config --cflag
显示开发标题的位置。我假设我可以以某种方式将 NPM 包定向到这些标头来构建pngquant-bin
二进制文件。
我在 GitHub 上记录了一个问题,提供了更多详细信息:https://github.com/svanderburg/node2nix/issues/123
免责声明:我是 NixOS 的新手 - 来自 Arch。我很感激任何建议,热爱 NixOS!
答案1
看来 libpng 包有多个输出,其中之一是开发版本。在我的 macOS 机器上:
brocking@station1:~/dev > nix-env -qasA nixpkgs.libpng.dev
-PS libpng-apng-1.6.34
里面有一章手册涵盖此内容的集合nixpkgs
。 IIRC nixpkgs 集合包含了最近几个主要版本的多个输出,我相信现在许多包都是以这种方式构建的。
PS nixpkgs 手册中还有一个部分涵盖Node.js 包这可能也值得一看。
我快速浏览了您打开的 GitHub 问题,您似乎确实走在正确的轨道上,但不幸的是我对 Node.js 不够熟悉,也无法node2nix
准确看出问题所在。
然而,我可以指出的一个普遍观点是,每当您尝试使用 Nix 打包某些内容并遇到如下错误时,它几乎总是意味着其中之一或两者 1. 您需要告诉 nix 如何它可以获取依赖项(libpng-dev
在本例中)和 2. 您需要确保您尝试构建的 nix 表达式以某种方式包含对 1. 的引用(通常是通过buildInputs
nix 属性,尽管这在很大程度上取决于你正在使用什么构建系统),在你的情况下,我猜测它可能作为生成的文件pngquant
中的表达式的参数,尽管正如我所说,它对我来说很陌生,所以我对此可能是完全错误的。default.nix
node2nix
ℹ compiling from source ✔ pngquant pre-build test passed successfully ✖ RequestError: pngquant failed to build, make sure that libpng-dev is installed
您可能会在 #nixos IRC 频道的聊天中找到更多、更快的帮助,那里的人非常有帮助,我之前在那里找到了很多知识。
最后一点,Nix 的强大之处在于它的纯度 - 你必须准确地告诉它在哪里可以找到一切,一开始可能有点令人畏惧。然而,一旦你明白了这一点,那么你就会真正欣赏到它的纯粹性。