autoconf:错误:可能是未定义的宏:AC_LIBOBJ

时间:2014-03-14 09:52:12

标签: autoconf

给出以下autoconf片段:

if test x"$rsync_cv_HAVE_GETADDR_DEFINES" = x"yes" -a x"$ac_cv_type_struct_addrinfo" = x"yes"; then
    # Tru64 UNIX has getaddrinfo() but has it renamed in libc as
    # something else so we must include <netdb.h> to get the
    # redefinition.
    AC_CHECK_FUNCS(getaddrinfo, ,
            [AC_MSG_CHECKING([for getaddrinfo by including <netdb.h>])
            AC_TRY_LINK([#include <sys/types.h>
            #include <sys/socket.h>
            #include <netdb.h>],[getaddrinfo(NULL, NULL, NULL, NULL);],
                    [AC_MSG_RESULT([yes])
                    AC_DEFINE(HAVE_GETADDRINFO, 1,
                            [Define to 1 if you have the "getaddrinfo" function and required types.])],
                    [AC_MSG_RESULT([no])
                    AC_LIBOBJ([getaddrinfo])])])
else
    AC_LIBOBJ([getaddrinfo])
fi

在该项目中运行autoconfautoreconf -fi时,我收到错误消息:

configure.ac:529: error: possibly undefined macro: AC_LIBOBJ

指向第一个AC_LIBOBJ出现。

改为运行以下序列:

aclocal
autoreconf

问题是在这个特定的项目中,configure-script应该命名为configure.sh(并使用包装器调用),所以我必须改为使用这个序列:

autoconf -o configure.sh
autoreconf

总是会产生上述错误。

这是autoconf-2.69加上我设置了以下(相关)选项:

AM_INIT_AUTOMAKE([subdir-objects tar-ustar foreign])
AC_CONFIG_LIBOBJ_DIR([lib])

我很可能在将来的某个时候用gnulib中包含的那个替换整个检测,但是现在我想保持原样。

3 个答案:

答案 0 :(得分:4)

apt-get install pkg-config

为我解决问题。

答案 1 :(得分:1)

问题似乎是configure.ac中的以下代码:

# define the directory for replacement function since AC_LIBOBJ does not
# officially support subdirs and fails with automake
AC_CONFIG_LIBOBJ_DIR([lib])

我真的应该使用autoconf评论:

dnl define the directory for replacement function since AC_LIBOBJ does not
dnl officially support subdirs and fails with automake
AC_CONFIG_LIBOBJ_DIR([lib])

答案 2 :(得分:0)

这通常是因为不同的宏以不正确的方式扩展。我建议你做两件事:使用AS_IF而不是if .. then .. else语句,并避免使用多个嵌套宏。

只需将结果变量设置为yes或no,然后使用单个AC_MSG_RESULT;而不是两次调用AC_LIBOBJ,只需在检查该变量时调用它。