Я модифицирую проект, который очень похож на примеры из Automake / документация libtool. Отрывки:
Верхний уровень configure.ac:
LT_INIT
Makefile.am верхнего уровня:
ACLOCAL_AMFLAGS = -I m4
SUBDIRS = src doc
./src
Makefile.am:
lib_LTLIBRARIES = libname.la
libname_la_SOURCES = <my cc file list>
libname_la_LDFLAGS = -no-undefined -version-info $(GENERIC_LIBRARY_VERSION)
include_HEADERS = <my h file list>
bin_PROGRAMS = progname
progname_SOURCES = <my cc file list>
progname_LDADD = libname.la
progname_LDFLAGS = -static
В среде fakeroot, предоставляемой моим программным обеспечением для создания пакетов, я выполняю следующие команды
$ autogen.sh # contains the usual calls to aclocal, libtoolize, automake, autoconf.
$ ./configure --prefix="/usr" --disable-static
$ make
...
/bin/sh ../libtool --tag=CXX --mode=link g++ -Wall -g -O2 -static -o progname progname.o libname.la <-lLIBRARY_NAME list>
libtool: link: g++ -Wall -g -O2 -o progname progname.o ./.libs/libname.so <-lLIBRARY_NAME list> -Wl,-rpath -Wl,<build_dir>/src/.libs
...
$ objdump -x src/progname | grep -i rpath
RPATH <build_dir>/src/.libs
$ make install
$ objdump -x <fakeroot_dir>/usr/bin/progname | grep -i rpath
RPATH <build_dir>/src/.libs
Во всех трех файлах * .la libdir='/usr/lib'
:
- /src/libname.la
- /src/.libs/libname.la
- /usr/lib/libname.la
Я понимаю, что RPATH настроен для / src / progname, чтобы разрешить выполнение сразу после make. Однако у меня создалось впечатление, что во время установки правила libtool удалит этот временный RPATH и заменит его на libdir ("/ usr / lib", как указано выше для настройки). Более того, современные выпуски libtool фактически удаляли бы RPATH, если бы libdir присутствовала в системном пути поиска ld.so.
Почему этого не происходит? В его нынешнем виде временный каталог RPATH представляет собой угрозу безопасности, позволяя любому загрузить вредоносное имя библиотеки libname.so из /src/.libs.
Черновик пакета Fedora RPath содержит несколько полезных предложений по удалению RPATH, однако я бы предпочел ответы, которые работают в рамках Autotools.