在configure.ac文件中添加以下代码:
AC_DEFUN([AC_CHECK_KERNEL_MEMBER], [
AC_MSG_CHECKING([if kernel member $2 exists])
AC_CACHE_VAL(ac_cv_${1}_kernel_member_$2, [
cat < conftest.c
#include
#include
int main(void)
{
return offsetof(struct $1, $2);
}
EOF
if AC_TRY_EVAL(ac_compile); then
if AC_TRY_EVAL(ac_link); then
ac_cv_$1_kernel_member_$2=yes
fi
fi
])
if test "x$ac_cv_$1_kernel_member_$2" = "xyes"; then
AC_MSG_RESULT([yes])
eval "$3=yes"
else
AC_MSG_RESULT([no])
eval "$3=no"
fi
])
然后在configure.ac中调用此宏以检查Linux内核结构体成员是否存在,示例如下:
AC_CHECK_KERNEL_MEMBER([stat], [st_atimensec], [HAVE_STAT_ST_ATIMENSEC])
if test "x${HAVE_STAT_ST_ATIMENSEC}" = "xyes"; then
AC_DEFINE([HAVE_STAT_ST_ATIMENSEC], [1], [Whether struct stat has st_atimensec member])
fi
这将检查Linux内核的stat结构体中是否存在st_atimensec成员,并定义HAVE_STAT_ST_ATIMENSEC宏以表示是否存在该成员。