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
例子:
目标软件不在 Ubuntu 存储库中
您仍然可以尝试缺少特定头文件的情况。使用Ubuntu 软件包索引(搜索包内容的选项)或apt-file
搜索文件。有时多个包可能会提供类似名称的文件,在这种情况下,首选:
- 文件在
/usr/include
。 - 您的架构的包(用于
uname -m
了解您的架构是什么)。 - 您的软件所依赖的任何特定版本(例如 Qt4 而不是 Qt5) - 检查源中的
README
和文件(如果存在)。INSTALL
- 名称以 结尾的软件包
-dev
,通常包含编译所需的标头。