Я в тупике на ссылке automake. Даже после многочасового изучения руководств и поиска в Интернете это, вероятно, неправильное понимание автоинструментов.
У меня есть одна библиотека .la, созданная libtool, одна общая библиотека .dylib, и я создаю программу. .la связан с .dylib, и программа использует .la.
Makefile.am для библиотеки .la
lib_LTLIBRARIES = libA.la
libA_la_LDFLAGS = ${AM_LDFLAGS} -no-undefined
libA_la_LIBADD = $(LIBM) -Ldir/to/ -lB
libA_la_CPPFLAGS = ${AM_CPPFLAGS}
Makefile.am для программы с оболочкой libtool
noinst_PROGRAMS = test
test_SOURCES = test_source.c
test_LDADD = libA.la -Ldir/to/ -lB
libA.la создается и связывается с B.dylib, но тестовая программа-оболочка, созданная automake, экспортирует DYLD_LIBRARY_PATH
для поиска libA.la, не связываясь с B.dylib. Ошибка
dyld: Library not loaded: ./B.dylib
Referenced from: /dir/to/test/.libs/test
Reason: image not found
Trace/BPT trap: 5
Некоторые вещи, которые я пробовал, добавляли -Ldir/to/ -lB
к test_LDFLAGS
в дополнение к тому, что уже было добавлено в test_LDADD
. И попытался установить test_LDFLAGS = -rpath -Ldir/to
в надежде, что установка пути поиска во время выполнения к каталогу, в котором находится B.dylib, поможет.
Если я вручную экспортирую DYLD_LIBRARY_PATH
, чтобы включить /dir/to/B.dylib
, тогда тестовая программа сможет работать, но я хочу, чтобы автоинструменты позаботились об этом, а не требовали, чтобы кто-то экспортировал путь, прежде чем он сможет его запустить.