如何处理来自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软件包所需的所有软件包(其软件包可能比源软件包实际需要的软件包少或多)。
如果您只需要在源代码中进行一些小的更改,或者应用补丁,您甚至可以通过让apt
和dpkg
执行legwork来节省大量的工作:
sudo apt-get build-dep apt-get source
这将下载包的源文件,包括制作包的所有内容。 这些文件将位于名为
。 输入它,进行所需的所有更改,然后执行以下操作:
sudo dpkg-buildpackage -b -us -uc
这将在父目录( cd ..
)中创建未签名的二进制包。 然后,您可以使用dpkg
来安装这些软件包:
sudo dpkg -i __.deb
例子:
- 更改包中的一个构建选项
- 无法编辑插件/ sudoers / ins _ *。h
目标软件不存在于Ubuntu存储库中
您仍然可以尝试运气丢失特定的头文件。 使用Ubuntu Packages索引 (搜索包内容的选项)或apt-file
来搜索文件。 有时多个包可能提供类似命名的文件,在这种情况下,更喜欢:
-
/usr/include
文件。 - 您的体系结构的包(使用
uname -m
来了解您的体系结构)。 - 您的软件所依赖的任何特定版本(例如Qt4而不是Qt5) – 检查源中的
README
和INSTALL
文件(如果存在)。 - 名称以
-dev
结尾的包,通常包括编译所需的标头。
请参阅: 如何找到提供文件的包?