LINUX.ORG.RU

libtool, небольшая проблема


0

0

Решил использовать для сборки библиотеки libtool + automake. Состряпал Makefile.am следующего содержания:

lib_LTLIBRARIES = libCommon.la
libCommon_la_SOURCES = libCommon.c

INCDIR  = ../INCLUDE
AM_CXXFLAGS = @CXXFLAGS@ -Wall $(INCDIR)

И собираю всё это безобразие через:
$ aclocal ; autoheader ; automake -ac ; autoconf ; ./configure ; make

Вроде бы всё нормально, но заметил несколько странностей.

1. Помимо этой библиотеки в проекте собирается ещё несколько бинарников, расположенных в других каталогах. В тех каталогах есть свои Makefile'ы, но они ссылаются на la-файл вышеуказанной библиотеки:

StartServer_LDADD = $(COMMON)/libCommon.la

В результате сборки в файле StartServer оказывается вовсе не ожидаемый бинарник (бинарник кладётся в каталог .libs), а какая-то обёртка, сгенерированная скриптом ltmain.sh Это нормально? Можно изменить это поведение, чтоб в каталоге лежал сразу бинарник?
После make install в каталоги установки копируются бинарники, но всё равно это дело меня несколько смущает.

2. При установке библиотек (make install) выскакивает следующий ворнинг:

Libraries have been installed in:
/usr/local/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
— add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
— add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
— use the `-Wl,--rpath -Wl,LIBDIR' linker flag
— have your system administrator add LIBDIR to `/etc/ld.so.conf'

Каталог /usr/local/lib я уже прописал в /etc/ld.so.conf, не помогло. Как можно исправить эту проблему?

3. При установке библиотек в /usr/local/lib помимо самих библиотек, копируются также и .la файлы (libCommon.la, например). Можно это дело как-нибудь пофиксить?

>>AM_CXXFLAGS = @CXXFLAGS@ -Wall $(INCDIR)

@CXXFLAGS@ не нужно, см. готовый Makefile

>>При установке библиотек (make install) выскакивает следующий ворнинг

это не страшно

>>INCDIR = ../INCLUDE
>>AM_CXXFLAGS = @CXXFLAGS@ -Wall $(INCDIR)

наверно INCDIR = -I../INCLUDE ?

а ещё лучше

INCLUDES = -I../INCLUDE
AM_CXXFLAGS = -Wall

>>При установке библиотек в /usr/local/lib помимо самих библиотек, копируются также и .la файлы (libCommon.la, например). Можно это дело как-нибудь пофиксить?

нет, т.к. библиотек копируются исходя из .la файла, а не наоборот

alex_custov ★★★★★
()

На тему обертки: если это изменить, то вы не сможете запустить свою программу без установки, а в данном случае сначала устанавливается корректный LD_LIBRARY_PATH, а потом уже запускается бинарик из .libs.

rymis ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.