В книге Autotools: Руководство по GNU Autoconf, Automake и Libtool , глава 6 (сборка библиотек с помощью libtool), приведен пример библиотеки ссылок.
В этом примере библиотека libjupiter.so
связана с другой библиотекой libjupcommon.a
.Первая попытка не удалась, потому что libjupiter.so
требуется PIC, а libjupcommon.a
- нет.Автор добавляет libjupcommon_a_CFLAGS = -fPIC
, чтобы исправить это.Это становится намного лучше, но появляется предупреждение ' Связывание общей библиотеки libjupiter.la со статической библиотекой ../common/libjupcommon.a не является переносимым! '.
Поэтомуавтор снова изменяет файл Makefile.am, используя libtool для сборки libjupcommon.la
.libjupiter
ссылается на libjupcommon.la
.Например:
noinst_LTLIBRARIES = libjupcommon.la
libjupcommon_la_SOURCES = jupcommon.h print.c
и
...
libjupiter_la_LIBADD = ../common/libjupcommon.la
На этот раз все в порядке.
Теперь моя проблема:
У меня есть библиотека, нужна другая библиотека, точно так же, как libjupiter
нужна libjupcommon
Отличие мое libjupcommon
от другого проекта и установлено в систему.Это не noinst_LTLIBRARIES
.Существуют версии .so
и .a
.Когда я пытаюсь связать libjupcommon.la
, как показано в примере, выбирается .so
, но мне не нужны динамические связи.Я хочу сделать ссылку на .a
, как в примере в книге.
Явная ссылка на .a
(с помощью _LIBADD = .a файла) дает полезную библиотеку, но выдает предупреждение '.... не переносится ».
Как правильно в этом случае добиться ссылки на .a
?
PS: Загрузите пример с официального сайта книги .В autotools/book/jupiter-libtool-ch6/common
измените файл Makefile.am noinst_LTLIBRARIES
на lib_LTLIBRARIES
, что должно быть похоже на мою проблему.