如何处理来自make的头文件的“No such file or directory”错误?

在编译源包时,我收到make的错误,看起来像:

 In file included from foo.c:28:0: bar.h:23:18: fatal error: bar.h: No such file or directory #include  ^ compilation terminated. make[x]: *** [baz] Error 1 make[x]: Leaving directory 

我该如何处理?

这通常表示您尚未安装正在尝试编译的程序的某些依赖项。 根据所讨论的头文件和您尝试编译的程序,您有以下几种选择:

目标软件存在于Ubuntu存储库中

有时你想从源代码编译一个已经由Ubuntu提供的软件包(或许可以获得一个不同的版本,或者修补它)。 如果软件没有太多变化,您可以使用apt来获取依赖项:

 sudo apt-get build-dep  

这应该安装构建该软件的Ubuntu软件包所需的所有软件包(其软件包可能比源软件包实际需要的软件包少或多)。

如果您只需要在源代码中进行一些小的更改,或者应用补丁,您甚至可以通过让aptdpkg执行legwork来节省大量的工作:

 sudo apt-get build-dep  apt-get source  

这将下载包的源文件,包括制作包的所有内容。 这些文件将位于名为- 。 输入它,进行所需的所有更改,然后执行以下操作:

 sudo dpkg-buildpackage -b -us -uc 

这将在目录( cd .. )中创建未签名的二进制包。 然后,您可以使用dpkg来安装这些软件包:

 sudo dpkg -i __.deb 

例子:

  1. 更改包中的一个构建选项
  2. 无法编辑插件/ sudoers / ins _ *。h

目标软件不存在于Ubuntu存储库中

您仍然可以尝试运气丢失特定的头文件。 使用Ubuntu Packages索引 (搜索包内容的选项)或apt-file来搜索文件。 有时多个包可能提供类似命名的文件,在这种情况下,更喜欢:

  1. /usr/include文件。
  2. 您的体系结构的包(使用uname -m来了解您的体系结构)。
  3. 您的软件所依赖的任何特定版本(例如Qt4而不是Qt5) – 检查源中的READMEINSTALL文件(如果存在)。
  4. 名称以-dev结尾的包,通常包括编译所需的标头。

请参阅: 如何找到提供文件的包?