如何搜索缺少包与apt-file在Debian和Ubuntu

如何使用apt-file在Debian和Ubuntu上搜索缺少的包

版本1.0
作者:Falko Timme

这篇简短的文章介绍如何在Debian和Ubuntu系统上搜索apt-file中的缺少的包。 apt-file允许您搜索文件名,并返回包含该文件的包的名称,以便可以安装相应的包。

我不会保证这将为您工作!

1初始情况

我想你都知道这一点:你试图从源头编译一些软件,突然间的汇编停止,因为它抱怨说,一些文件缺少你以前从未听说过的:

root@falko-desktop:~/avant-window-navigator-0.1.1# make
make all-recursive
make[1]: Entering directory `/root/avant-window-navigator-0.1.1'
Making all in src
make[2]: Entering directory `/root/avant-window-navigator-0.1.1/src'
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -DORBIT2=1 -pthread -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/libwnck-1.0 -I/usr/include/gconf/2 -I/usr/include/orbit-2.0 -DDATADIR=\""/usr/local/share"\" -DGNOMELOCALEDIR=\""/usr/local/share/locale"\" -g -O2 -Wall -pedantic -std=c99 -fno-strict-aliasing -fmessage-length=0 -D_FORTIFY_SOURCE=2 -MT main.o -MD -MP -MF ".deps/main.Tpo" -c -o main.o main.c; \
then mv -f ".deps/main.Tpo" ".deps/main.Po"; else rm -f ".deps/main.Tpo"; exit 1; fi
main.c:21:21: error: gtk/gtk.h: No such file or directory
In file included from main.c:25:
awn-gconf.h:69: error: expected â)â before â*â token
In file included from main.c:26:
awn-bar.h:43: error: expected specifier-qualifier-list before âGtkWindowâ
awn-bar.h:45: warning: struct has no members
awn-bar.h:48: error: expected specifier-qualifier-list before âGtkWindowClassâ
awn-bar.h:49: warning: struct has no members
awn-bar.h:51: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â before â*â token
awn-bar.h:55: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â before â*â token
awn-bar.h:57: error: expected â)â before â*â token
awn-bar.h:58: error: expected â)â before â*â token
In file included from main.c:27:
awn-window.h:43: error: expected specifier-qualifier-list before âGtkWindowâ
awn-window.h:45: warning: struct has no members
awn-window.h:48: error: expected specifier-qualifier-list before âGtkWindowClassâ
awn-window.h:49: warning: struct has no members
awn-window.h:55: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â before â*â token
In file included from main.c:28:
awn-app.h:30:29: error: libwnck/libwnck.h: No such file or directory
In file included from main.c:28:
awn-app.h:60: error: expected specifier-qualifier-list before âWnckWindowâ
awn-app.h:80: warning: struct has no members
awn-app.h:83: error: expected â)â before â*â token
In file included from main.c:29:
awn-win-manager.h:35: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â before â*â token
main.c:32: error: expected â)â before â*â token
main.c: In function âmainâ:
main.c:48: error: âGtkWidgetâ undeclared (first use in this function)
main.c:48: error: (Each undeclared identifier is reported only once
main.c:48: error: for each function it appears in.)
main.c:48: error: âwinâ undeclared (first use in this function)
main.c:49: error: âbarâ undeclared (first use in this function)
main.c:50: error: âboxâ undeclared (first use in this function)
main.c:51: error: âwinmanâ undeclared (first use in this function)
main.c:52: error: âlabâ undeclared (first use in this function)
main.c:54: warning: implicit declaration of function âgtk_initâ
main.c:56: warning: implicit declaration of function âawn_bar_newâ
main.c:58: warning: implicit declaration of function âawn_window_newâ
main.c:59: warning: implicit declaration of function âgtk_window_set_policyâ
main.c:59: warning: implicit declaration of function âGTK_WINDOWâ
main.c:61: error: âexposeâ undeclared (first use in this function)
main.c:64: warning: implicit declaration of function âgtk_hbox_newâ
main.c:66: warning: implicit declaration of function âawn_win_mgr_newâ
main.c:68: warning: implicit declaration of function âgtk_box_pack_startâ
main.c:68: warning: implicit declaration of function âGTK_BOXâ
main.c:68: warning: implicit declaration of function âgtk_label_newâ
main.c:72: warning: implicit declaration of function âgtk_container_addâ
main.c:72: warning: implicit declaration of function âGTK_CONTAINERâ
main.c:74: warning: implicit declaration of function âgtk_widget_show_allâ
main.c:76: warning: implicit declaration of function âgtk_window_set_transient_forâ
main.c:79: warning: implicit declaration of function âgtk_mainâ
make[2]: *** [main.o] Error 1
make[2]: Leaving directory `/root/avant-window-navigator-0.1.1/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/root/avant-window-navigator-0.1.1'
make: *** [all] Error 2
root@falko-desktop:~/avant-window-navigator-0.1.1#

那么你如何知道哪个(显然是丢失的)包包含该文件,以便您可以安装软件包并再次尝试编译?

对于基于Debian的系统(如Ubuntu),解决方案是apt-file。 apt-file可以搜索文件名,并返回包含该文件的包。

2安装apt-file

apt-file安装如下:

apt-get install apt-file

安装后,我们必须更新apt-file的包数据库,如下所示:

apt-file update

您还必须在修改/etc/apt/sources.list时执行此操作

3搜索软件包

现在我们来搜索包含文件gtk / gtk.h的软件包 。 你可以这样搜索:

apt-file search gtk.h

但是这会给大量的包裹,所以让我们通过运行缩小搜索范围

apt-file search gtk/gtk.h

输出如下所示:

root@falko-desktop:~/avant-window-navigator-0.1.1# apt-file search gtk/gtk.h
libgfcui-dev: usr/include/gfc-2.0/gfc/gtk/gtk.hh
libgtk+2.0-directfb-dev: usr/include/directfb/gtk-2.0/gtk/gtk.h
libgtk1.2-dev: usr/include/gtk-1.2/gtk/gtk.h
libgtk2.0-dev: usr/include/gtk-2.0/gtk/gtk.h
libgtk2.0-doc: usr/share/doc/libgtk2.0-doc/gtk/gtk.html
root@falko-desktop:~/avant-window-navigator-0.1.1#

如你所见,有三个包含gtk / gtk.h的包(一个包含gtk / gtk.hh ,另一个gtk / gtk.html这不是我们正在寻找的),现在由你安装正确的一个。 如果您不确定,您可以安装所有三个软件包,或者一个接一个地安装,如果编译错误仍然发生,请检查每个软件包。 在我们的例子中,正确的包是libgtk2.0-dev ,所以我们安装一个:

apt-get install libgtk2.0-dev

现在我们再次尝试编译:

root@falko-desktop:~/avant-window-navigator-0.1.1# make
make all-recursive
make[1]: Entering directory `/root/avant-window-navigator-0.1.1'
Making all in src
make[2]: Entering directory `/root/avant-window-navigator-0.1.1/src'
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -DORBIT2=1 -pthread -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/libwnck-1.0 -I/usr/include/gconf/2 -I/usr/include/orbit-2.0 -DDATADIR=\""/usr/local/share"\" -DGNOMELOCALEDIR=\""/usr/local/share/locale"\" -g -O2 -Wall -pedantic -std=c99 -fno-strict-aliasing -fmessage-length=0 -D_FORTIFY_SOURCE=2 -MT main.o -MD -MP -MF ".deps/main.Tpo" -c -o main.o main.c; \
then mv -f ".deps/main.Tpo" ".deps/main.Po"; else rm -f ".deps/main.Tpo"; exit 1; fi
In file included from /usr/include/gtk-2.0/gtk/gtk.h:170,
from main.c:21:
/usr/include/gtk-2.0/gtk/gtktextbuffer.h:52: warning: ISO C restricts enumerator values to range of âintâ
/usr/include/gtk-2.0/gtk/gtktextbuffer.h:53: warning: ISO C restricts enumerator values to range of âintâ
/usr/include/gtk-2.0/gtk/gtktextbuffer.h:55: warning: ISO C restricts enumerator values to range of âintâ
In file included from main.c:28:
awn-app.h:30:29: error: libwnck/libwnck.h: No such file or directory
In file included from main.c:28:
awn-app.h:60: error: expected specifier-qualifier-list before âWnckWindowâ
awn-app.h:80: warning: struct has no members
awn-app.h:83: error: expected â)â before â*â token
main.c: In function âmainâ:
main.c:52: warning: unused variable âlabâ
make[2]: *** [main.o] Error 1
make[2]: Leaving directory `/root/avant-window-navigator-0.1.1/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/root/avant-window-navigator-0.1.1'
make: *** [all] Error 2
root@falko-desktop:~/avant-window-navigator-0.1.1#

正如你所看到的,初始错误现在已经消失,但是还有一个文件缺少, libwnck / libwnck.h ,所以我们来搜索丢失的包:

apt-file search libwnck/libwnck.h

这次我们很幸运,只有一个包含该文件的包:

root@falko-desktop:~/avant-window-navigator-0.1.1# apt-file search libwnck/libwnck.h
libwnck-dev: usr/include/libwnck-1.0/libwnck/libwnck.h
root@falko-desktop:~/avant-window-navigator-0.1.1#

所以我们来安装丢失的包:

apt-get install libwnck-dev

4链接

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏