Я новичок в 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
? Пожалуйста, помогите мне решить эту проблему.
Вероятно, вы действительно хотите 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.
libssh2_session_init did not link
. Я не понимаю почему. Та же самая реализация работает для pthread:AC_CHECK_LIB(pthread, pthread_attr_init, PTHREAD_LIBS="-lpthread")
. Можете ли вы запустить и проверить с вашего конца? Это работает?config.log
? autoconf выводит результаты тестов, чтобы понять, что происходит.