Автоинструмент & amp; Libtool — Как собрать общую библиотеку из нескольких исходных каталогов?

Я пытаюсь собрать библиотеку из Autotools (Automake / Libtool)

Моя структура каталогов:

src/MyLib/*some_sources*.cpp/.h + a Makefile.am
src/MyLib/Parsers/*some_other_sources.cpp/.h Makefile.am

Когда я помещаю все мои исходные файлы в одну и ту же директорию (то есть, нет подкаталога «Parsers»), все работает нормально. (компиляция, затем связь с другими программами)

Но когда я пробую свою «идеальную структуру» (базовая исходная папка + подкаталог «Parsers»), я получаю ошибку компоновки, когда пытаюсь скомпилировать программу с библиотекой:

<< usr/local/lib/mylib.so: undefined reference to <a function from "/Parsers" subdir > >>

Кажется, что Libtool не связывает статически мой подкаталог «Parsers» во время компиляции (возможно, рассматривая его как внешнюю разделяемую библиотеку?)

Вот моя база «Makefile.am»:

lib_LTLIBRARIES = mylib.la
SUBDIRS = Parsers .
mylib_la_SOURCES = <base_dir_source_files>

И мой «Makefile.am» в подкаталоге парсеров:

mylib_la_SOURCES = <parsers_dir_source_files>

Конечно, я libtoolize-d, autoreconf-ed все, после создания subdir «Parser».

Спасибо заранее за вашу помощь.

1

Решение

Самое простое в вашем случае — просто не добавлять Makefile.am файл в каталог парсеров. Вместо этого добавьте имена исходных файлов в MyLib/Makefile.am с префиксом $(srcdir)/Parsers/ (лучше с переменной).

Что-то вроде этого:

src/
|
\--MyLib/
|
|--Makefile.am
|--base.cpp
|--base.h
\--Parsers/
|
|--parser.cpp
\--parser.h

И в src / MyLib / Makefile.am:

PARSERS=$(srcdir)/Parsers
foo_SOURCES: base.cpp base.h \
$(PARSERS)/parse.cpp $(PARSERS)/parse.h
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]