AC_TRY_LINK:无法链接“libssh2”

时间:2015-01-09 05:39:50

标签: c++ c configure autotools libssh2

我是Autotools的初学者。我已经写了一些工作configure脚本来调用Makefile。所以,我想通过添加一些预编译检查来使我的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_LINKlibssh2的情况下没有链接?请帮我解决这个问题。

1 个答案:

答案 0 :(得分: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添加到LIBSAC_TRY_LINK没有这样做,它只是执行编译和链接步骤,使用LIBS中发生的任何事情,在这种情况下可能没什么。

顺便说一下,你可能想要至少检查POSIX线程的AX_PTHREAD宏。

相关问题