/ / Linking zu Geschwister Libtool Bibliothek mit rekursiven Automake - Shared-Bibliotheken, Autotools, Autoconf, Automake, Libtool

Linking zu Geschwister Libtool-Bibliothek mit rekursiven Automake - Shared-Bibliotheken, Autotools, Autoconf, Automake, Libtool

Ich baue eine gemeinsam genutzte Bibliothek und habe einen Quellbaum, der wie folgt strukturiert ist:

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

Ich benutze rekursive Automake, da einige der Bibliotheken von Drittanbietern mit ihren eigenen Automake-Dateien verteilt werden. src/Makefile.am enthält die üblichen Libtool-Makros:

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

Wie verknüpfe ich die Hauptbibliothek mit denen von Drittanbietern? Das Autotools Handbuch führt mich zu der Annahme, dass die Third-Party-Bibliotheken als Libtool-Convenience-Bibliotheken erstellt werden müssen, also habe ich folgendes: thirdparty/lib1/Makefile.am:

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

Und füge folgendes hinzu: src/Makefile.am:

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

Meine Wurzel Makefile.am enthält das Makro INCLUDES:

INCLUDES = -I$(top_builddir)/thirdparty

Aber das Bauen mit dieser Konfiguration gibt mir undefinierte Symbolfehler.

Was ist der richtige Weg, um diesen Quellcode zu strukturieren und alle Bibliotheken miteinander zu verknüpfen?

Antworten:

0 für die Antwort № 1

Es stellt sich heraus, dass das Source-Layout und die Libtool-Verwendung in Ordnung waren, aber mein Root-Makefile.am hatte das folgende Makro:

SUBDIRS = src thirdparty

Was hätte sein sollen

SUBDIRS = thirdparty src

Seit dem Code in src/ referenzierte den Code in thirdparty/, das thirdparty/ Code musste zuerst erstellt werden. Das SUBDIRS Makro bewirkt, dass Unterordner in der angegebenen Reihenfolge von links nach rechts erstellt werden.