Я нахожусь в autotool
среда.
Я занимаюсь разработкой библиотеки A
который использует библиотеку B
а также C
как зависимости.
B
с libtool
поэтому вывод libB.la
C
с простым Makefile и вывод libC.a
A
с libtool, а вывод libA.la
Затем я создаю тестовую программу, которая связывает эти библиотеки вместе.
Makefile.am
ниже.
check_PROGRAMS = acc_test
AM_CPPFLAGS = -I$(top_srcdir)/include \
-I$(top_srcdir)/deps/C/include \
-I$(top_srcdir)/deps/B/includeLDADD = $(top_builddir)/src/libA.la \
$(top_builddir)/deps/B/src/libB.la \
$(top_builddir)/deps/C/libC.a
acc_test_SOURCES = test.cpp
Когда я бегу acc_test
Я встречаю
dyld: сбой привязки ленивых символов: символ не найден: __ZN7leveldb7OptionsC1Ev
Ссылка на: /Users/somepath/build/src/.libs/libA.0.dylib
Ожидается в: плоское пространство именdyld: символ не найден: __ZN7leveldb7OptionsC1Ev
Ссылка на: /Users/somepath/cw/build/src/.libs/libA.0.dylib
Ожидается в: плоское пространство имен
Это моя главная проблема.
После того, как я попробовал много вещей, я нашел это.
C
библиотека внутри A
, Если я прокомментирую их из A
код, это не сбой.C
явно в test.cpp
не падает. AM_LDFLAGS = -static
не падает. B
не падает.Мои вопросы ниже
-static
? Я думаю, что это странно, если пользователю нужно статически связать эти библиотеки, когда они хотят использовать мою библиотеку A
B
в заголовках. Это связано?Спасибо
Задача ещё не решена.
Других решений пока нет …