ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [devel] libtool: la_LIBADD vs noinst_LIBRARIES
@ 2004-02-03 21:35 Alexey Tourbin
  2004-02-04  9:20 ` [devel] " Mikhail Zabaluev
                   ` (2 more replies)
  0 siblings, 3 replies; 24+ messages in thread
From: Alexey Tourbin @ 2004-02-03 21:35 UTC (permalink / raw)
  To: devel

[-- Attachment #1: Type: text/plain, Size: 2816 bytes --]

Здравствуйте.

Для тех, кто не в курсе, краткая справка: libtool -- это wrapper для
компилятора и линкера для упрощенного создания библиотек.
Псевдо-библиотека libtool имеет суффикс .la (пресловутые .la files).
Псевдо-библиотеке соответствуют статическая .a и динамическая .so
библиотеки.  Сборка этих двух типов библиотек автоматически выполняются
с разными флагами компиляции (для динамических библиотек генерируется
т.н. position independent code с помощью -fPIC).

Таким образом, одни и те же библиотечные исходники компилируются
дважды (если не отключить статическую сборку).  По умолчанию
используются динамические библиотеки, для которых PIC code дает
заметное преимущество.  Для статических библиотек и executables PIC code
дает небольшой проигрыш.

Теперь обратим внимание на пакет mpfc (music player for console).

$ cat mpfc-1.1.1/plugins/effect/echo/Makefile.am
lib_LTLIBRARIES = libecho.la

libdir = $(prefix)/lib/mpfc/effect

libecho_la_SOURCES = echo.c
INCLUDES = -I$(top_builddir)/src
libecho_la_LIBADD = $(top_builddir)/src/util/libutil.a \
                                        $(top_builddir)/src/cfg/libcfg.a
$

Здесь мы видим, что "полноценная" libtool библиотека libecho.la как в
статическом, так и в динамическом виде линкуется со вспомогательными
статическими библиотеками libutil.a и libcfg.a.

$ cat mpfc-1.1.1/src/util/Makefile.am
noinst_LIBRARIES = libutil.a
libutil_a_SOURCES = util.c ../util.h
localedir = $(datadir)/locale
DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@
INCLUDES = -I$(top_builddir)/src
$

Здесь мы видим, что библиотека libutil.a действительно является
вспомогательной и не предназначена для установки (noinst_LIBRARIES),
а предназначена только для статической компоновки в libecho.la и в
некоторые другие библиотеки этого пакета.

Таким образом, by design, в этом пакете статический non-piс код
(libutil.a) будет "подмешиваться" в динамические библиотеки
(libecho.so).  Соответственно, такие динамические библиотеки не будут
проходить проверку brp-verify_elf.

К чести libtool надо сказать, что в таких ситуациях он выдает честное
предупреждение:

*** Warning: Linking the shared library libecho.la against the
*** static library ../../../src/util/libutil.a is not portable!

К "стыду" разработчиков надо сказать, что пакет mpfc не один подвержен
этой напасти (сегодня я ещё исправил flac и буду дальше заниматься этим
вопросом).

Теперь предлагаю обсудить варианты решения проблемы:

1) Можно изменить структуру пакета (возможно, увеличив число полноценных
библиотек и исключив вспомогательные статические библиотеки).

2) Обнаружив вспомогательные статические библиотеки, можно "насильно"
заставить их собираться с -fPIC примерно следующим образом:

%configure
%__subst -p 's/%optflags/& %optflags_shared/g' .../Makefile
%make_build

Я пока предпочел второй вариант.

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2004-02-20  9:47 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-02-03 21:35 [devel] libtool: la_LIBADD vs noinst_LIBRARIES Alexey Tourbin
2004-02-04  9:20 ` [devel] " Mikhail Zabaluev
2004-02-04 16:44   ` Alexey Tourbin
2004-02-04 16:45     ` Alexey Tourbin
2004-02-04 20:49     ` Mikhail Zabaluev
2004-02-04 20:49       ` Mikhail Zabaluev
2004-02-04 20:51       ` Dmitry V. Levin
2004-02-04 20:51         ` Dmitry V. Levin
2004-02-04 20:58 ` [devel] " Dmitry V. Levin
2004-02-04 20:58   ` Dmitry V. Levin
2004-02-04 21:47   ` [devel] " Mikhail Zabaluev
2004-02-04 21:47     ` Mikhail Zabaluev
2004-02-04 21:57     ` Dmitry V. Levin
2004-02-04 21:57       ` Dmitry V. Levin
2004-02-04 23:08       ` Alexey Morozov
2004-02-05  6:52     ` Anton Farygin
2004-02-05  6:52       ` Anton Farygin
2004-02-05  9:08       ` Mikhail Zabaluev
2004-02-05  9:08         ` Mikhail Zabaluev
2004-02-05 11:57       ` Michael Shigorin
2004-02-05 11:57         ` Michael Shigorin
2004-02-09  2:57   ` Alexey Tourbin
2004-02-09 10:48     ` Dmitry V. Levin
2004-02-20  9:47 ` [devel] " Alexey Morozov

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git