Я пытаюсь собрать библиотеку из 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».
Спасибо заранее за вашу помощь.
Самое простое в вашем случае — просто не добавлять 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
Других решений пока нет …