1) У меня есть проект, содержащий общую библиотеку, связанную с некоторыми зарубежными библиотеками (а именно gcrypt
, gpg-error
, z
и ssh2
). Давайте назовем это «mylib». Эта библиотека прекрасно строится, и я могу видеть, как правильно связывать зависимости.Autoconf: ссылка на ошибку, связанная с пользовательской библиотекой
libtool: link: ppc-linux-gcc -shared -fPIC -DPIC .libs/mylib1.o .libs/mylib2.o .libs/mylib3.o
-Wl,-rpath -Wl,/opt/ELDK/ppc_8xx/lib -Wl,-rpath \
-Wl,/opt/ELDK/ppc_8xx/lib /opt/ELDK/ppc_8xx/lib/libssh2.so \
-L/opt/ELDK/ppc_8xx/lib -lz /opt/ELDK/ppc_8xx/lib/libgcrypt.so \
/opt/ELDK/ppc_8xx/lib/libgpg-error.so -lpthread -O2 \
-Wl,-soname -Wl,mylib.so.0 -o .libs/mylib.so.0.0.0
2) В этом же проекте имеется несколько программ, ссылающихся на «mylib». Когда я пытаюсь соединить их, хотя, я получил ошибки компоновщика о тех же предыдущих библиотек:
/opt/ELDK-3.1/usr/bin/../lib/gcc-lib/ppc-linux/3.3.3/../../../../ppc-linux/bin/ld: \
warning: libssh2.so.1, needed by ./../myLib/.libs/mylib.so, not found (try using -rpath or -rpath-link)
/opt/ELDK-3.1/usr/bin/../lib/gcc-lib/ppc-linux/3.3.3/../../../../ppc-linux/bin/ld: \
warning: libz.so.1, needed by ./../myLib/.libs/mylib.so, not found (try using -rpath or -rpath-link)
/opt/ELDK-3.1/usr/bin/../lib/gcc-lib/ppc-linux/3.3.3/../../../../ppc-linux/bin/ld: \
warning: libgcrypt.so.11, needed by ./../myLib/.libs/mylib.so, not found (try using -rpath or -rpath-link)
/opt/ELDK-3.1/usr/bin/../lib/gcc-lib/ppc-linux/3.3.3/../../../../ppc-linux/bin/ld: \
warning: libgpg-error.so.0, needed by ./../myLib/.libs/mylib.so, not found (try using -rpath or -rpath-link)
./../myLib/.libs/mylib.so: undefined reference to `libssh2_channel_process_startup'
./../myLib/.libs/mylib.so: undefined reference to `libssh2_scp_send_ex'
В разделе «MyLib» configure.ac
я явно искать библиотеки:
AC_SEARCH_LIBS(gpg_err_set_errno,[gpg-error])
AC_SEARCH_LIBS(gcry_check_version,[gcrypt])
AC_SEARCH_LIBS(deflate,[z])
AC_SEARCH_LIBS(libssh2_init,[ssh2])
Должен ли я также явно включать все эти библиотеки в каждый проект, используя «mylib»? Разве это не должно быть разрешено, когда я сначала свяжу их в «mylib»?
Есть ли лучший способ сделать это?
Спасибо.
P.S .: Я не очень умен в autoconf
вопрос, извините.
ПРИМЕЧАНИЕ. Я использую кросс-компиляцию для PowerPC, используя (еще старый) ELDK 3.1.
ли вы переопределить любого из директив для вашей программы в Makefile.am? –
У меня есть что-то вроде 'program1_CPPFLAGS = -I $ (top_srcdir) $ (MYLIB_CFLAGS)' где 'MYLIB_CFLAGS' и' MYLIB_LIBS' определены с 'AC_ARG_WITH' в' configure.ac' из 'program1', чтобы я мог ссылаться на локальный «mylib» вместо установленной системы (скажите, пожалуйста, если это лучший способ сделать это). – j4x
CPPFLAGS не должны быть релевантными, но как вы используете MYLIB_LIBS в Makefile.am? В вашем окончательном Makefile должна быть цель для program1 $ (EXEEXT), которая содержит команду $ (LINK), и эта команда должна иметь $ (LIBS), которая должна содержать библиотеки, если AC_SEARCH_LIBS удалось найти данную библиотеку. –