AC_TRY_LINK: не удалось связать «libssh2»

0

Я новичок в Autotools. И я написал некоторые рабочие скрипты configure для вызова Makefile s. Итак, я хотел бы сделать мой скрипт configure более надежным, добавив некоторые проверки перед компиляцией.

Например, я попытался проверить, может ли скрипт configure связывать pthread или нет.

AC_TRY_LINK([#include <pthread.h>],[pthread_attr_t *attr=NULL; pthread_attr_init(attr);],[AC_MSG_RESULT(yes)],[AC_MSG_RESULT(no)])

Выход: yes

Позже я попытался связать libssh2 же, как показано выше.

AC_TRY_LINK([#include <libssh2.h>],[LIBSSH2_SESSION *session;session = libssh2_session_init();],[AC_MSG_RESULT(libssh2_session_init() worked)],[AC_MSG_RESULT(libssh2_session_init did not work)])

Но вывод этого макроса показывает: libssh2_session_init did not work.

Я попытался запустить образец кода на основе libssh2 и он работает. Посмотрите ниже:

libsshex.c

#include <libssh2.h>
#include <stdio.h>
int main()
{
        LIBSSH2_SESSION *session;
        session = libssh2_session_init();

        if(session)
                printf("session initiated\n");
        else
                printf("session failed\n");
        return 0;
}

КОМПОЗИЦИЯ И РАБОТА:

root@rohit-Precision-T1500:/test# gcc libsshex.c -lssh2
root@rohit-Precision-T1500:/test# ./a.out 
session initiated
root@rohit-Precision-T1500:/test# 

Как вы можете видеть выше, связь успешна.

Итак, почему AC_TRY_LINK не ссылается в случае с libssh2? Пожалуйста, помогите мне решить эту проблему.

Теги:
autotools
libssh2
configure

1 ответ

0

Вероятно, вы действительно хотите AC_CHECK_LIB вместо AC_TRY_LINK:

AC_CHECK_LIB ([ssh2], [libssh2_session_init_ex],
              [AC_MSG_RESULT(libssh2_session_init linked)], 
              [AC_MSG_RESULT(libssh2_session_init did not link)])

Разница в том, что AC_CHECK_LIBS добавит -lssh2 в LIBS до того, как будет предпринята попытка компиляции и ссылки. AC_TRY_LINK этого не делает, он просто делает шаг компиляции и ссылки, используя все, что происходит в LIBS, что в данном случае, вероятно, ничего.

BTW, вы можете, по крайней мере, изучить макрос AX_PTHREAD для потоков POSIX.

  • 0
    Спасибо за Ваш ответ. Это дает мне некоторые знания. Но вышеупомянутый MACRO не работает в моем скрипте конфигурации. Это дает вывод, так как libssh2_session_init did not link . Я не понимаю почему. Та же самая реализация работает для pthread: AC_CHECK_LIB(pthread, pthread_attr_init, PTHREAD_LIBS="-lpthread") . Можете ли вы запустить и проверить с вашего конца? Это работает?
  • 1
    Вы изучили config.log ? autoconf выводит результаты тестов, чтобы понять, что происходит.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню