How To Search For Missing Packages With apt-file On Debian and Ubuntu

Version 1.0
Author: Falko Timme

This short article describes how you can search for missing packages with apt-file on Debian and Ubuntu systems. apt-file allows you to search for a file name, and it gives back the name(s) of the package(s) containing that file so that you can install the appropriate package.

I do not issue any guarantee that this will work for you!

 

1 Initital Situation

I guess you all know this: you try to compile some software from the sources, and suddenly the compilation stops because it complains that some file is missing of which you have never heard before:

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#

So how do you know which (obviously missing) package contains that file so that you can install the package and try the compilation again?

For Debian based systems (like Ubuntu) the solution is apt-file. apt-file lets you search for file names and gives back the package(s) containing that file.

 

2 Install apt-file

apt-file is installed as follows:

apt-get install apt-file

After the installation, we must update apt-file's package database like this:

apt-file update

You must also do this whenever you modify /etc/apt/sources.list.

 

3 Search For Packages

Now let's search for the package containing the file gtk/gtk.h. You could search like this:

apt-file search gtk.h

but this would give back lots of packages, so let's narrow down the search by running

apt-file search gtk/gtk.h

The output looks like this:

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#

As you see there are three packages containing gtk/gtk.h (one contains gtk/gtk.hh, another one gtk/gtk.html which is not what we are looking for), and it's now up to you to install the right one. If you are unsure, you can install all three packages, or you install one after the other and check after each one if the compilation error still occurs. In our case the right package is libgtk2.0-dev, so we install that one:

apt-get install libgtk2.0-dev

Now we try the compilation again:

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#

As you see, the initial error is now gone, but still another file is missing, libwnck/libwnck.h, so let's search for the missing package:

apt-file search libwnck/libwnck.h

This time we're lucky, there's only one package containing that file:

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#

So let's install the missing package:

apt-get install libwnck-dev

 

Share this page:

1 Comment(s)