What is the difference between LDADD and LIBADD?

Dave picture Dave · May 15, 2014 · Viewed 19.9k times · Source

I'm trying to setup an automake project that uses a mix of libtool libraries and exectuables, and I'm having a hard time grokking the automake documentation, esp. as relates to telling the compiler to link against.

So can someone explain the differences between LDADD and LIBADD?

Things like:

  • when is one used over the other,
  • which one takes -lname_of_library style values vs. direct filenames, etc.

Whenever I try to read the relevant documentation, it seems like it assumes that I know things that I don't.

Answer

Brett Hale picture Brett Hale · May 15, 2014

Use the LIBADD primary for libraries, and LDADD for executables. If you were building a libtool library libfoo.la, that depended on another library libbar.la, you would use:

libfoo_la_LIBADD = libbar.la

If you had other non-libtool libraries, you would also add these with -L and -l options:

libfoo_la_LIBADD = libbar.la -L/opt/local/lib -lpng

Typically, you would use the configure script to find these extra libraries, and use AC_SUBST to pass them with:

libfoo_la_LIBADD = libbar.la $(EXTRA_FOO_LIBS)

For a program, just use LDADD :

myprog_LDADD = libfoo.la # links libfoo, libbar, and libpng to myprog.

Sometimes the boundaries are a bit vague. $(EXTRA_FOO_LIBS) could have been added to myprog_LDADD. Adding dependencies to a libtool (.la) library, and using libtool do all the platform-specific linker magic, is usually the best approach. It keeps all the linker metadata in the one place.