Search code examples
clinuxlibraries

How are C libraries installed?


sorry for stupid question, but I have been writing programs in other languages and now that I am starting to get into C, I would like to know this.

I am on Arch (sorry to be that guy, I think it matters), and pretty new to it, but I need to install library. Are libraries packages, or should I get them from somewhere like github? What is propper procedure? Library in question is libgimp/gimp.h

Thanks in advance.


Solution

  • Run:

    $sudo pacman -S gimp
    

    And then:

    $ ls -l usr/include/gimp-2.0/libgimp/
    usr/include/gimp-2.0/libgimp/gimp.h
    usr/include/gimp-2.0/libgimp/gimp_pdb.h
    usr/include/gimp-2.0/libgimp/gimp_pdb_headers.h
    usr/include/gimp-2.0/libgimp/gimpaspectpreview.h
    usr/include/gimp-2.0/libgimp/gimpbrush_pdb.h
    usr/include/gimp-2.0/libgimp/gimpbrushes.h
    usr/include/gimp-2.0/libgimp/gimpbrushes_pdb.h
    usr/include/gimp-2.0/libgimp/gimpbrushmenu.h
    usr/include/gimp-2.0/libgimp/gimpbrushselect.h
    usr/include/gimp-2.0/libgimp/gimpbrushselect_pd
    ...
    

    You will have to provide the compiler flag

    -I/usr/include/gimp-2.0
    

    And the linker flag:

    -lgimp-2.0 -lgimpbase-2.0
    

    Note: Always include files this way:

    #include <libgimp/file_name.h>
    

    e.g.:

    #include <libgimp/gimp.h>
    

    Update: As requested by another user, I am attaching the instructions in terms of pkg-config (not a big user myself but it's a great tool):

    $ pkg-config --cflags gimp-2.0
    -I/usr/include/gimp-2.0 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libpng16 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/cairo -I/usr/include/lzo -I/usr/include/freetype2 -I/usr/include/harfbuzz -I/usr/include/pixman-1 -I/usr/include/gegl-0.4 -I/usr/include/gio-unix-2.0 -I/usr/include/json-glib-1.0 -pthread -I/usr/include/babl-0.1 
    $ pkg-config --libs gimp-2.0
    -lgimp-2.0 -lgimpmath-2.0 -lgimpconfig-2.0 -lgimpcolor-2.0 -lgimpbase-2.0 -lgdk_pixbuf-2.0 -lcairo -lgegl-0.4 -lgegl-npd-0.4 -lm -Wl,--export-dynamic -lgmodule-2.0 -pthread -lglib-2.0 -ljson-glib-1.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lbabl-0.1 
    

    So you may just pass that to your compiler:

    GIMP_INCLUDES=$(pkg-config --cflags gimp-2.0)
    GIMP_LIBS=$(pkg-config --libs gimp-2.0)
    g++ myfile.cpp $GIMP_INCLUDES myfile.o
    g++ myfile.o $GIMP_LIBS -o main