From: Alexey Tourbin <at@altlinux.ru> To: devel@altlinux.ru Subject: [devel] libtool: la_LIBADD vs noinst_LIBRARIES Date: Wed, 4 Feb 2004 00:35:22 +0300 Message-ID: <20040203213522.GE23713@solemn.turbinal.org> (raw) [-- 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 --]
next reply other threads:[~2004-02-03 21:35 UTC|newest] Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top 2004-02-03 21:35 Alexey Tourbin [this message] 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
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20040203213522.GE23713@solemn.turbinal.org \ --to=at@altlinux.ru \ --cc=devel@altlinux.ru \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
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