【发布时间】:2020-01-13 11:11:18
【问题描述】:
我正在捆绑一个依赖于libxml 的.cpp 程序,但g++ 找不到它。我已经完成了使libxml 可用的适当步骤,但是目录结构与源预期的略有不同。我想知道这个问题的基于 nix 的解决方案。
编译器(来自 nix-shell 会话)说 libxml 不在我的系统路径中:
fatal error: libxml/encoding.h: No such file or directory
#include <libxml/encoding.h>
但是,它应该是。在我的 .nix 文件中,我确保包含 libxml2
buildInputs = [ ... libxml2 ...];
我的nix-shell 环境确认该库存在:
NIX_CFLAGS_COMPILE= [...] -isystem /nix/store/zf1nyqyx2zd6y944ln2rxnhd5m4265n4-libxml2-2.9.9-dev/include [...]
如果我查看该目录,我发现搜索路径已关闭。文件的路径实际上是(相对于 NIX_CFLAGS_COMPILE 路径):
libxml2/libxml/encoding.h
我发现我可以通过在我的编译命令中添加以下选项来弥补这个偏一路径错误:
-isystem /nix/store/zf1nyqyx2zd6y944ln2rxnhd5m4265n4-libxml2-2.9.9-dev/include/libxml2
(与NIX_CFLAGS_COMPILE 相同的路径,但从libxml2 目录开始。)
鉴于这些信息,我想知道一个基于 nix 的解决方案来解决这个问题。源不是我的,所以改变它们是我想做的最后一件事。我看到了另外两个选择。
首先,我可以在buildPhase 期间触发的makefile 中添加路径。但是,我不确定如何简单地抓住这条路。例如,当我需要libxml2-2.9.9-dev 时,在我的派生中继承libxml2 使libxm2-2.9.9-bin 目录可用。我想我可以在NIX_CFLAGS_COMPILE 路径上使用grep 或sed,但我宁愿不这样做。
我的首选解决方案是基于 libxml2 进行简单的 libxml 派生,然后将其添加到我的 buildInputs 中,但这似乎也不简单。
【问题讨论】:
标签: gcc libxml2 include-path nix