Hi Vlad,
* Vlad Skvortsov wrote on Sun, Dec 04, 2005 at 08:01:45AM CET:
I use automake/libtool environment for a project with couple of dozens
of libraries. I link those libraries statically into the binaries that
are then distributed. It works ok.
What I need now is to create a shared library that would contain a
subset of those smaller libraries. Say, I want to pack the contents of
libaaa.la, libbbb.la and libccc.la into libbig, and libbig has to be
shared (it will be distributed in binary form).
When I use something like this:
lib_LT_LIBRARIES = libbig.la
libbig_la_LIBADD = .../libaaa.la .../libbbb.la .../libccc.la
I end up with the shared library that contains _references_ to _shared_
libraries aaa, bbb and ccc. But I just want their contents to be packed
inside.
How can I achieve that?
You make the other libraries into `convenience archives'. These are
documented in both
info Automake 'A Shared Library'
info Libtool 'Static libraries'
Short: noinst_LTLIBRARIES creates these, they contain objects with PIC
code. You'd do:
noinst_LTLIBRARIES = libaaa.la libbbb.la libccc.la
lib_LTLIBRARIES = libbig.la
libbig_la_LIBADD = ./libaaa.la ./libbbb.la ./libccc.la
Now I guess you *also* want to build the program as will, with the stuff
linked in statically. You *can* do
bin_PROGRAMS = foo
foo_LDADD = ./libaaa.la ./libbbb.la ./libccc.la
and it will likely work fine, on many platforms. *However*: It's not
totally portable, it will actually link PIC objects into your program,
thus the program will be a bit slower than with non-PIC objects, and
of course you should not let foo get anywhere close to libbig, as then
you'll have fun with duplicate symbols.