libexif provides a libexif.pc file for use with pkgconfig on the libexif installation. If you are using libtool to build your package, you can also make use of libexif-uninstalled.pc.
An application using libexif would typically first create an ExifLoader to load EXIF data into memory. From there, it would extract that data as an ExifData to start manipulating it. Each IFD is represented by its own ExifContent within that ExifData, which contains all the tag data in ExifEntry form. If the MakerNote data is required, an ExifMnoteData can be extracted from the ExifData and manipulated with the MakerNote functions.
libexif is written in C using an object-based style that defines sets of functions that operate on each data structure.
ExifData The entirety of EXIF data found in an image
ExifContent All EXIF tags in a single IFD
ExifEntry Data found in a single EXIF tag
ExifMnoteData All data found in the MakerNote tag
ExifLog State maintained by the logging interface
Libexif by default relies on the calloc(3), realloc(3), and free(3) functions, but the libexif user can tell libexif to use their special memory management functions at runtime.
The programmer must ensure that each object allocated by libexif is only used in a single thread at once. For example, an ExifData* allocated in one thread can't be used in a second thread if there is any chance that the first thread could use it at the same time. Multiple threads can use libexif without issues if they never share handles.