这是合约。我想编写一个内核模块,它取决于内核类型(32位或64位)。 当且仅当内核是32位并且如果内核是64位时应包含的某些代码行,我希望将一些代码行包含在模块中。
是否有像#if LINUX_VERSION_CODE<对于这种情况,KERNEL_VERSION(2,6,26)?
答案 0 :(得分:6)
您可以检查CONFIG_X86_64和CONFIG_X86_32 - 如果拱门是x86。对于其他架构,有类似的CONFIG选项。
答案 1 :(得分:0)
在终端上查看
$ uname -m
x86_64
检查二进制文件以在系统上确定
$ file /usr/bin/file
/usr/bin/file: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), for GNU/Linux 2.6.8, dynamically linked (uses shared libs), stripped
如果系统为32-bit
,当然可以在64-bit
系统上运行multilib
个应用。但您可以查看系统本身的某些部分,以验证它是64-bit
。像这样,例如
$file /sbin/init
/sbin/init: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), for GNU/Linux 2.6.16, dynamically linked (uses shared libs), stripped
从
引用答案 2 :(得分:0)
如果使用gcc
,您可以将_LP64
或__LP64__
作为#define
进行1
测试:
这些宏定义为值1,if(且仅当)编译是针对目标的,其中long int和指针 使用64位和int使用32位。
对于gcc
的预定义宏,请在此处阅读:http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html