/ / Pripojenie k knižnici libraries s rekurzívnym Automake - zdieľané knižnice, autotools, autoconf, automake, libtool

Prepojenie s knižnicou libraries s rekurzívnymi Automake - zdieľané knižnice, autotools, autoconf, automake, libtool

Vytvárajem zdieľanú knižnicu a štruktúru štruktúry stromu takto:

Makefile.am
src/
Makefile.am
srcfile1.h
srcfile1.cpp
...
thirdpaty/
Makefile.am
lib1/
Makefile.am
lib1.h
lib1.cpp
...
lib2/
...

Používam rekurzívny Automake, pretože niektoré knižnice tretích strán sú distribuované s vlastnými súbormi Automake. src/Makefile.am obsahuje bežné makrá libtoolu:

lib_LTLIBRARIES = libmylib.la
libmylib_la_SOURCES = scrfile1.h srcfile1.cpp ...

Ako prepojiť hlavnú knižnicu s treťou stranou? Autotools manuál ma vedie k presvedčeniu, že knižnice tretích strán musia byť postavené ako libtool komfortné knižnice, takže mám nasledujúce thirdparty/lib1/Makefile.am:

noinst_LTLIBRARIES  = libthirdpaty1.la
libthirdpaty1_la_SOURCES = lib1.cpp lib1.h

A pridajte nasledujúce informácie src/Makefile.am:

libmylib_la_LIBADD = $(top_buildir)/thirdparty/lib1/libthirdpaty1.la

Môj root Makefile.am obsahuje makro INCLUDES:

INCLUDES = -I$(top_builddir)/thirdparty

Ale budovanie s touto konfiguráciou mi dáva nedefinované chyby symbolov.

Aký je správny spôsob štruktúry tohto zdrojového kódu a prepojenie všetkých knižníc?

odpovede:

0 pre odpoveď č. 1

Ukazuje sa, že rozloženie zdroja a využitie libtoolu boli v poriadku, ale môj root Makefile.am mal nasledujúce makro:

SUBDIRS = src thirdparty

Čo malo byť

SUBDIRS = thirdparty src

Vzhľadom k tomu, kód v src/ odkazoval na kód v thirdparty/, thirdparty/ kód musí byť postavený ako prvý. SUBDIRS makro spôsobí, že podadresáre budú vytvorené v poradí, v akom sú zadané, zľava doprava.