What do the *-dev packages in the Linux package repositories actually contain?

UbuntuDebianRepositoryPackages

Ubuntu Problem Overview


My question is very basic, as is my knowledge right now.

I'm a long-time Linux user, but have only recently taken a major interest in programming. I see that many popular applications in the Ubuntu repositories have -dev packages (e.g. pidgin-dev in addition to pidgin). My question is this:

What is in these packages? How does downloading pidgin-dev help one to develop for Pidgin? Is it as simple as a dependency check for the tools necessary to create the plugins for the given application?

I was hoping there would be a substantial amount of documentation in the -dev packages, but if there is, I can't figure out how to access it. I'm thinking of something like a man-page, but useful for editing code.

Any and all advice more than welcome!

Ubuntu Solutions


Solution 1 - Ubuntu

The *-dev packages most often contain the headers related to a library's interface. Next most common are package-config files (*.pc) describing build options and staticly linked libraries.

In general, if you want to know the contents of a package you have installed, dpkg -L pkgname will get you that. The apt-file program can tell you the same for any package in the repositories.

Note, also, that the answers by William Pursell and caf contain useful additional details. If you find their input helpful, do upvote it.

Solution 2 - Ubuntu

(disclaimer: I'm familiar with Debian but not Ubuntu, so although it is almost certain that everything I write below applies, there's is a chance it's not.)

One more item in the *-dev package is the /usr/lib/lib*.so link. The libfoo0 package will install the file /usr/lib/libfoo.so.0.0, while libfoo-dev installs the links /usr/lib/libfoo.so.0 and /usr/lib/libfoo.so. This is the mechanism that allows you to have libfoo0 and libfoo1 installed simultaneously, so that software requiring the old library can co-exist on the box with software using the new library. When you install libfoo-dev, any software that is compiled will follow the *.so link and link against the version of the library referenced by that link.

Solution 3 - Ubuntu

The -dev packages usually contain C header files and statically compiled versions of library files (.a extension). Sometimes they contain additional documentation and examples, or even helper applications.

Solution 4 - Ubuntu

This package contains the headers and other development files not included in the main pidgin package. Install -dev if you wish to compile your own plugins.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionconorschView Question on Stackoverflow
Solution 1 - UbuntuPhil MillerView Answer on Stackoverflow
Solution 2 - UbuntuWilliam PursellView Answer on Stackoverflow
Solution 3 - UbuntucafView Answer on Stackoverflow
Solution 4 - UbuntutefoziView Answer on Stackoverflow