Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在配置中打印C宏的值_Linux_Linux Kernel_Autotools_Autoconf - Fatal编程技术网

Linux 如何在配置中打印C宏的值

Linux 如何在配置中打印C宏的值,linux,linux-kernel,autotools,autoconf,Linux,Linux Kernel,Autotools,Autoconf,我有configure.in脚本。我想调用configure(在autoheader&&autoconf之后)并从系统标题PAGE\u types.h中查看PAGE\u SHIFT宏的值。大概是这样的: #include <linux/module.h> static long int longval () { return PAGE_SHIFT; } static unsigned long int ulongval () { return PAGE_SHIFT; } #inclu

我有
configure.in
脚本。我想调用
configure
(在
autoheader&&autoconf
之后)并从系统标题
PAGE\u types.h
中查看
PAGE\u SHIFT
宏的值。大概是这样的:

#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>
正在检查页面\u移位。。。12

我试过这些:

一,

二,

三,

  • 方法采用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>
    

    Autoconf版本:Autoconf(GNU Autoconf)2.69

    我建议使用宏。e、 g

    AC_MSG_CHECKING(['PAGE_SHIFT' value])
    
    AC_COMPUTE_INT([PAGE_SHIFT_VAL], [PAGE_SHIFT], [[#include <linux/module.h>]],
      AC_MSG_FAILURE([linux/module.h: could not determine 'PAGE_SHIFT' value]))
    
    AC_MSG_RESULT([$PAGE_SHIFT_VAL])
    
    AC\u MSG\u检查(['PAGE\u SHIFT'值])
    AC#u COMPUTE_INT([PAGE_SHIFT_VAL],[PAGE_SHIFT],[include],
    AC_MSG_故障([linux/module.h:无法确定'PAGE_SHIFT'值])
    AC_MSG_结果([$PAGE_SHIFT_VAL])
    
    或者,您可以使用
    PAGE\u SHIFT\u VAL=0
    替换
    FAILURE
    宏,并在错误可恢复的情况下测试
    (0)
    的值


    注意,在此上下文中,变量名
    PAGE\u SHIFT\u VAL
    没有什么神奇之处;你可以用另一个名字。如果希望在生成的文件(如
    config.h
    )或
    AC\u config\u文件中列出的文件中替换此值,则仍然需要
    AC\u SUBST
    ,谢谢。您的方法不适用于内核头。Autoconf使此代码
    #include#include#include[…]
    结果:
    包含在/usr/include/stdlib.h:314:0的文件中,来自conftest.c:125:/usr/include/x86\u 64-linux-gnu/sys/types.h:44:18:错误:包含在[…]中的文件中的“loff”的类型冲突,来自conftest.c:121:/lib/modules/4.2.0-18-generic/build/include/linux/types.h:45:26:注意:前面的“loff_t”声明在这里
    @RomanZaytsev-您需要知道linux构建Makefile是如何工作的,以及如何设置内核(交叉)编译-这是“独立的”-使用gcc包含路径,
    CFLAGS
    ,sysroot选项等等。我的问题似乎太宽泛了,取决于交叉编译标志等等。我接受你的答案,因为它对于非内核头是正确的。
    checking PAGE_SHIFT... 
    
    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
    
    #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;
    
    AC_MSG_CHECKING(['PAGE_SHIFT' value])
    
    AC_COMPUTE_INT([PAGE_SHIFT_VAL], [PAGE_SHIFT], [[#include <linux/module.h>]],
      AC_MSG_FAILURE([linux/module.h: could not determine 'PAGE_SHIFT' value]))
    
    AC_MSG_RESULT([$PAGE_SHIFT_VAL])