Чтобы решить ваши две вещи по порядку:
Скрипт libtool
перехватывает эту инструкцию install
и также устанавливает файл .so
в соответствующее место.
Он помещает его в /usr/local/lib
, вероятно, потому, что вы указали его в lib_LTLIBRARIES
(хотя я не могу быть уверен, что вы не показываете свой код), а для вашего --prefix
установлено значение по умолчанию /usr/local
.
Последнее сложно, поскольку официальная позиция Autotools заключается в том, что все установленные пользователем программы относятся к /usr
, в то время как многие другие инструменты ожидают, что все будет в /lib/something
. Вот один из способов сделать это, который лично я считаю неправильным:
# Don't do this
libsecuritydir = /lib/security
libsecurity_LTLIBRARIES = pam_mymodule.la
Это обходит --prefix
, что будет ужасно, ужасно неправильно, если вы попытаетесь выполнить локальную установку вашего пакета без записи непосредственно в вашу действующую систему, что, поверьте мне, вы захотите сделать в какой-то момент. Это также помешает вам упаковать вашу программу в системы упаковки большинства дистрибутивов Linux.
Правильный способ — переложить ответственность на того, кто устанавливает пакет: добавить аргумент --with-libsecuritydir
к configure.ac
, используя AC_ARG_WITH
, и пусть по умолчанию он равен $(libdir)/security
:
AC_ARG_WITH([libsecuritydir],
[AS_HELP_STRING([--with-libsecuritydir],
[Directory for PAM modules, pass /lib/security for live install])],
[], [with_libsecuritydir='$(libdir)/security'])
AC_SUBST([libsecuritydir], [$with_libsecuritydir])
а потом просто делай
libsecurity_LTLIBRARIES = pam_mymodule.la
in Makefile.am
.
Если вы хотите установить живую версию непосредственно в свою систему (или собираете бинарный пакет), передайте --with-libsecuritydir=/lib/security
в configure
.
person
ptomato
schedule
26.09.2014