我该如何处理 make 中头文件的“没有此文件或目录”错误?

我该如何处理 make 中头文件的“没有此文件或目录”错误?

make当编译源包时,我收到如下错误:

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

我该如何处理这个问题?

答案1

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

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

有时,您想从源代码编译 Ubuntu 已提供的软件包(可能是为了获取不同的版本,或对其进行修补)。如果软件没有太大变化,您可以使用apt来获取依赖项:

sudo apt-get build-dep <package-name>

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

apt如果您只需要在源代码中做一些小的更改,或者应用补丁,那么您甚至可以通过做dpkg腿部工作来节省大量精力:

sudo apt-get build-dep <package-name>
apt-get source <package-name>

这将下载软件包的源文件,包括制作软件包所需的一切。这些文件将位于名为 的目录中<package-name>-<some-version>。进入该目录,进行所有所需的更改,然后执行以下操作:

sudo dpkg-buildpackage -b -us -uc

这将在父母目录(cd ..)。然后您可以使用dpkg来安装以下软件包:

sudo dpkg -i  <package-name>_<some-version>_<architecture>.deb

例子:

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

目标软件不在 Ubuntu 存储库中

您仍然可以尝试缺少特定头文件的情况。使用Ubuntu 软件包索引(搜索包内容的选项)或apt-file搜索文件。有时多个包可能会提供类似名称的文件,在这种情况下,首选:

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

看:如何找到提供文件的包?

相关内容