Сборка .so модуля с autotools / libtool без установки .la и .a вариантов - PullRequest
15 голосов
/ 18 августа 2011

Как собрать и установить модуль .so с помощью autotools / libtool без библиотек .la и .a также устанавливается в --prefix path?

В настоящее время я использую следующие Makefile.am:

lib_LTLIBRARIES = libCurlDownloader.la
libCurlDownloader_la_SOURCES = Curl.cpp
libCurlDownloader_la_LDFLAGS = -module -avoid-version

Работает, но в дополнение к libCurlDownloader.so также устанавливает libCurlDownloader.la и libCurlDownloader.a, что нежелательно.

Обновление № 1

Возможно сделать .a не генерируемым, используя либо

./configure --disable-static

или

AC_ENABLE_SHARED(yes)
AC_ENABLE_STATIC(no)

в configure.ac

Но все же остается вопрос, как сделать так, чтобы .la не устанавливался в установку - префикс при установке .so.

Обновление № 2

Можно удалить .la файлы из установки - префикс, используя

install-exec-hook: find $(DESTDIR)$(libdir) -type f -name \*.la -delete

Ответы [ 2 ]

3 голосов
/ 13 февраля 2016

Я наткнулся на этот вопрос, потому что он использовал термин «модуль», который, как говорят в automake / libtool, является термином для плагина.У меня есть система плагинов в Finit, поэтому я собираю свои плагины с помощью '-module', чтобы избежать создания файлов .a.Но я все еще получаю установленные файлы .la, что на самом деле даже не применимо в случае '-module'.

Мне еще предстоит найти документированный способ пропустить файлы .la для плагинов, но здеськак я это делаю:

AM_LDFLAGS = -module -avoid-version -shared
pkglib_LTLIBRARIES = alsa-utils.la bootmisc.la

install-exec-hook:
        @(cd $(DESTDIR)$(pkglibdir) && $(RM) $(pkglib_LTLIBRARIES))

Для ясности, в моем сценарии использования никто не собирается "ссылаться" на мой плагин .so, поэтому файлы .la действительно бесполезны.

2 голосов
/ 07 апреля 2012

Не обязательно удалять файлы .la.Файлы .la содержат информацию, которая используется в двух ситуациях:

  1. Статическое связывание со встроенной библиотекой.При статическом связывании (т. Е. .a с -static) информация о зависимостях связываемой библиотеки отсутствует, поэтому libtool может использовать информацию из файла .la для создания соответствующей команды ld, ссылающейся на всенеобходимые зависимости.Это часто более важно в среде, такой как MinGW, где компоновщик требует одинаковые значения, указанные в библиотеке, в определенном порядке для разрешения рекурсивных зависимостей.Это вызывает беспокойство только в том случае, если мы собираемся создать статический двоичный файл.

  2. Динамическая загрузка библиотеки сборки на некоторых платформах (т. Е. С lt_dlopen при использовании libltdl).Аналогично, на некоторых платформах зависимости модуля компиляции не кодируются в двоичном файле, поэтому необходим файл .la, чтобы lt_dlopen находил и загружал правильные зависимости.На платформах ELF (включая Linux) и PE (т.е. Windows) зависимости хранятся в библиотеке, поэтому lt_dlopen будет работать без файлов .la.Формат MachO в MacOS может потребовать .la файлов при сборке пакетов.

Упаковщики Debian / Ubuntu решили исключить файлы .la из своих пакетов, поскольку вторая причина неподходит для Linux, и они предпочли бы, чтобы вы не создавали статические двоичные файлы в первую очередь.На других платформах, которые поддерживает libtool, файлы .la могут понадобиться для связывания или запуска программы.

...