/ / Łączenie z biblioteką sibling libtool za pomocą rekursywnego Automake - współdzielone biblioteki, autotools, autoconf, automake, libtool

Łączenie z siostrzaną biblioteką libtool z rekurencyjną Automake - biblioteki współdzielone, autotools, autoconf, automake, libtool

Buduję bibliotekę współdzieloną i mam strukturę drzewa źródłowego w następujący sposób:

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

Używam rekurencyjnego Automake, ponieważ niektóre biblioteki innych firm są dystrybuowane z własnymi plikami Automake. src/Makefile.am zawiera zwykłe makra libtool:

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

Jak połączyć główną bibliotekę z biblioteką zewnętrzną? The Instrukcja obsługi narzędzi automatycznych prowadzi mnie do przekonania, że ​​biblioteki innych firm muszą być zbudowane jako biblioteki wygody libtool, więc mam następujące thirdparty/lib1/Makefile.am:

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

I dodaj następującą src/Makefile.am:

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

Mój root Makefile.am zawiera makro INCLUDES:

INCLUDES = -I$(top_builddir)/thirdparty

Ale budowanie za pomocą tej konfiguracji daje mi niezdefiniowane błędy symboli.

Jaki jest właściwy sposób na strukturę tego kodu źródłowego i połączenie wszystkich bibliotek razem?

Odpowiedzi:

0 dla odpowiedzi № 1

Okazuje się, że ten układ źródłowy i użycie libtool były w porządku, ale mój root Makefile.am miał następujące makro:

SUBDIRS = src thirdparty

Co powinno być

SUBDIRS = thirdparty src

Od czasu wprowadzenia kodu src/ odwołał się do kodu w thirdparty/, thirdparty/ kod musiał zostać zbudowany najpierw. The SUBDIRS Makro powoduje, że podfoldery są budowane w kolejności, w jakiej zostały określone, od lewej do prawej.