【发布时间】:2015-11-27 11:14:57
【问题描述】:
我有configure.in 脚本。我想调用configure(在autoheader && autoconf 之后)并从系统标头page_types.h 中查看PAGE_SHIFT 宏的值。像这样的:
checking PAGE_SHIFT... 12
这些我都试过了:
1.
AC_CHECK_DECL([PAGE_SHIFT],[HAVE_PAGE_SHIFT=$PAGE_SHIFT],[],
[#include <linux/module.h>])
AC_MSG_NOTICE([${HAVE_PAGE_SHIFT}])
结果:检测到宏 PAGE_SHIFT,但尚未打印
checking whether PAGE_SHIFT is declared... yes
configure:
2.
HAVE_PAGE_SHIFT="Unknown"
AC_MSG_CHECKING([PAGE_SHIFT])
AC_COMPILE_IFELSE(
[
AC_LANG_PROGRAM([
#include <linux/module.h>
#include <stdio.h>
],
[
printf("%d\n", PAGE_SHIFT);
])],
[HAVE_PAGE_SHIFT="$PAGE_SHIFT"], [])
AC_MSG_RESULT([${HAVE_PAGE_SHIFT}])
结果:不起作用
checking PAGE_SHIFT...
3.
AC_MSG_CHECKING(['PAGE_SHIFT' value])
AC_RUN_IFELSE(
[
#include <linux/module.h>
#include <stdio.h>
int
main ()
{
printf("%d\n", PAGE_SHIFT);
return 0;
}
]
)
结果:有效,但不能用于交叉编译
checking 'PAGE_SHIFT' value... 12
- 方法是 suggested,作者是 Brett Hale
Autoconf 会生成如下内容:
#include <linux/module.h>
static long int longval () { return PAGE_SHIFT; }
static unsigned long int ulongval () { return PAGE_SHIFT; }
#include <stdio.h>
#include <stdlib.h>
结果:不适用于内核头文件
In file included from /usr/include/stdlib.h:314:0,
from conftest.c:125:
/usr/include/x86_64-linux-gnu/sys/types.h:44:18: error: conflicting types for 'loff_t'
typedef __loff_t loff_t;
^
In file included from /lib/modules/4.2.0-18-generic/build/arch/x86/include/asm/page_types.h:5:0,
from [...],
from conftest.c:121:
/lib/modules/4.2.0-18-generic/build/include/linux/types.h:45:26: note: previous declaration of 'loff_t' was here
typedef __kernel_loff_t loff_t;
Autoconf 版本:autoconf (GNU Autoconf) 2.69
【问题讨论】:
标签: linux linux-kernel autotools autoconf