给出以下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
在该项目中运行autoconf
或autoreconf -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中包含的那个替换整个检测,但是现在我想保持原样。
答案 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
,只需在检查该变量时调用它。