处理 NixOS 缺少依赖项 ~ libpng-dev

处理 NixOS 缺少依赖项 ~ libpng-dev

远离像 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. 的引用(通常是通过buildInputsnix 属性,尽管这在很大程度上取决于你正在使用什么构建系统),在你的情况下,我猜测它可能作为生成的文件pngquant中的表达式的参数,尽管正如我所说,它对我来说很陌生,所以我对此可能是完全错误的。default.nixnode2nix

ℹ compiling from source ✔ pngquant pre-build test passed successfully ✖ RequestError: pngquant failed to build, make sure that libpng-dev is installed

您可能会在 #nixos IRC 频道的聊天中找到更多、更快的帮助,那里的人非常有帮助,我之前在那里找到了很多知识。

最后一点,Nix 的强大之处在于它的纯度 - 你必须准确地告诉它在哪里可以找到一切,一开始可能有点令人畏惧。然而,一旦你明白了这一点,那么你就会真正欣赏到它的纯粹性。

相关内容