Существует множество странностей в том, что вы представили, и одна явная ошибка.Вы говорите:
Я получаю файл с именем libprocs.la
в процессах, но я не получаю двоичный файл.Я также вполне уверен, что мои Make-файлы неверны, так как я даже не могу скомпилировать main.cpp
вручную.
Конечно, make
вывод содержит одно или несколько сообщений об ошибках, которые объясняют, почему сборкавыходит из строя.Я полагаю, что если бы вы make
не использовали только подкаталог procs
, в этом случае конечно вы бы не получили main
встроенный.
Но я 'Я достаточно уверен, что могу догадаться: вы получаете ошибку компоновщика с жалобой на то, что он не может найти ProcA_SubprocA::ProcA_SubprocA
.Это может быть потому, что, хотя ваш Makefile указывает, что библиотека должна быть встроена (и также установлена), он нигде не говорит, что ее нужно связать с main
.Для этого есть довольно простое решение, к которому я вернусь через минуту.
Сначала давайте поговорим о libprocs.la
.Суффикс .la
имеет смысл для Autotools, обозначая «архив libtool», но вы фактически создаете его как обычную статическую библиотеку.На самом деле libtool
здесь не делает ничего особенно полезного для вас;Я бы сбросил его, удалив LT_INIT
из вашего configure.ac
(и больше не запускать libtoolize
, так как он вернет это обратно).Затем измените имя библиотеки для сборки на более стандартную libprocs.a
.
Кроме того, поскольку эта библиотека, по-видимому, предназначена только для использования с одной создаваемой программой, включать ее бесполезнов установке самостоятельно.Поэтому вместо того, чтобы обозначать его в lib_LIBRARIES
, назначьте его как неустановленную вспомогательную библиотеку:
noinst_LIBRARIES = libprocs.a
Затем вам потребуется внести соответствующее изменение в переменную SOURCES
библиотеки:
libprocs_la_SOURCES = ...
libprocs_a_SOURCES = ...
Возвращаясь к основной программе сейчас, вы должны сказать make
(иAutomake), что библиотека должна быть связана с программой main
.Есть несколько вариантов того, как вы могли бы это сделать, но я собираюсь предложить довольно простой:
main_LDADD = procs/libprocs.a
После этих изменений повторите autoreconf
(но не libtoolize
).Помните, однако, что вам нужно запускать это только после изменения источников Autotools - только файлы Makefile.am
и configure.ac
в вашем случае.Это деталь поддержки и развития пакета и его системы сборки в частности.Это не должно быть обычной частью сборки или установки пакета.