Around 99% of the time, the package you need can be found in and installed from the Ubuntu repository. As for the remaining 1%, you have to build the program yourself. This is where the GNU development tools come in handy. Most important of these is the C compiler.

While the basic Ubuntu installation already includes the GNU C/C++ compiler, it's not nearly complete. Missing are important header files which fall under the build-essential package.

To install build-essential:

sudo apt-get install build-essential

build-essential is actually just a list of additional packages that Ubuntu pulls down from the repositories, not the files themselves. In total, the packages come out to around 30MB.

The files are:

libc6-dev | libc0.3-dev | libc6.1-dev | libc-dev

Provides the ISO C standard library; indirectly depended on by g++, but we'll ignore it since libc6-dev is used for non-C++ programs too.


Used only on the sparc architecture.

gcc (>= 4:4.1.1)

The C compiler

g++ (>= 4:4.1.1)

The C++ compiler


Also depended on by dpkg-dev, but make does warrant its own dependency since debian/rules will need it even if dpkg-dev stopped depending on it

dpkg-dev (>= 1.13.5)

Provides dpkg-genchanges and other scripts. Versioned, because of support for the build-time dependency fields in /debian/control and dpkg-architecture support for OS and CPU information.