I have a makefile which looks like this .
DEFINES=-std=c++0x
INCS_GTK=-I/usr/include/gtk-2.0 -I/usr/include/glib-2.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/gtk-2.0/gdk -I/usr/include/pango-1.0 -I/usr/lib/gtk-2.0/include -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include
INCS=-I/usr/include/freetype2 -I/usr/include/mysql -Iframeworks ${INCS_GTK}
LDLIBS=-lconfig++ -lcxcore -lcv -lGL -lGLU -lglut -lhighgui -lSDL -lftgl -lueye_api -lboost_filesystem -lboost_system -lann -lpthread -lflycapture -lglog -lmysqlpp -lmysqlclient -lunittest++
DEBUG=-g -pg
WARNINGS=-Wall -Wextra -pedantic -Wno-long-long #-O3 -Weffc++
BUILDDIR=build
BINDIR=dist
MAINCXX=${shell find -name '*.cxx'}
TARGETS=${MAINCXX:%.cxx=%}
CXXFLAGS=${DEBUG} ${WARNINGS} ${DEFINES} ${INCS}
LDFLAGS=${DEBUG} ${WARNINGS} ${DEFINES}
include IDEconfigs/Makefile/generic.mk
I want to add the following paths of static libraries to the makefile .
/usr/local/lib/libYARP_OS.a /usr/local/lib/libYARP_sig.a /usr/local/lib/libYARP_math.a /usr/local/lib/libYARP_dev.a /usr/local/lib/libYARP_name.a /usr/local/lib/libYARP_init.a
how do i go about doing this .
Append
-lYARP_OS -lYARP_sig -lYARP_math -lYARP_dev -lYARP_name -lYARP_init
toLDLIBS
.Warning: the linking order may matter.
Also, be sure that the linker knows that
/usr/local/lib
is a place where to look for libraries, otherwise instruct it with-L/usr/local/lib
(you could add another makefile variable, e.g.LIBPATHS
or something similar, to contain the libraries paths).As a general synopsis, if you have a library
libMyLib.a
in folder/my/path
, thegcc
(org++
) can be invoked with the following parameters:-L
is used to include paths where the linker will look for libraries-l
is used to link a library, which must be passed without thelib
prefix and the extensionThis question may be useful for a general understanding of libraries usage in C and C++: How to use Libraries
You can either use an
-L<path>
flag to tell GCC about the location of any library, and then include it with-l<libname>
. For example this would beas noted by swair.
Alternatively, you can also supply the full path of the static library and compile directly, like
See 'Shared libraries and static libraries' for details.
In your specific case I would add them to the
LDLIBS=
line.NB: Be careful about linking order, this is relevant when linking programs together. See 'Link order of libraries' for details. For example:
works
Also see this similar question: How to link to a static library in C?
Lets consider your
/usr/local/lib/libYARP_OS.a
.What you can do is, have
-L/usr/local/lib/
in your makefile as one of the variables. And then you can have-lYARP_OS
appended to the LDLIBS.-L is for path to the lib and -l is the lib name here
libYARP_OS.a
will be passed as-lYARP_OS
.On the command line you would do something like:
gcc -o main main.c -L/usr/local/lib/ -lYARP_OS
. This should give you an idea.In Makefile , add like this
USER_LIBS = -lYARP_OS -lYARP_sig -lYARP_math -lYARP_dev -lYARP_name -lYARP_init
This will link the libraries you required