Bjo*_*ern 3 c linux 64-bit build
我即将将Windows 32位应用程序移植到64位,但可能决定稍后将整个程序移植到Linux.
代码包含的部分取决于应用程序可用的内存量(这取决于我是否正在创建32位或64位版本),而编译32位版本的代码的能力应该保留为后向兼容性.
在Windows上,我可以简单地将相应的代码段包装到预处理器语句中,以确保编译正确的代码版本.
不幸的是,我在Linux平台上编程的经验很少,所以问题出现了:
我如何在Linux平台上识别64位版本?
是否有任何(最好是非编译器特定的)预处理器定义我可以检查这个?
提前致谢!
\比约恩
假设您正在使用最近的GNU GCC编译器用于IA32(32位)和amd64(非Itanium 64位目标用于AMD64/x86-64/EM64T/Intel 64),因为很少有人需要不同的Linux编译器(英特尔和PGI).
有编译器行开关(可以在Makefile中添加到CFLAGS)-m64/-m32来控制构建目标.
对于条件C代码:
#if defined(__LP64__) || defined(_LP64)
#define BUILD_64 1
#endif
Run Code Online (Sandbox Code Playgroud)
要么
#include <limits.h>
#if ( __WORDSIZE == 64 )
#define BUILD_64 1
#endif
Run Code Online (Sandbox Code Playgroud)
虽然第一个是GCC特定的,但第二个更容易携带,但在一些我无法想到的奇怪环境中可能不正确.
目前,两者都应该正确地适用于IA-32/x86(x86-32)和x86-64/amd64环境.我认为它们也适用于IA-64(安腾).
另请参阅GCC开发者峰会上的Andreas Jaeger的论文题为" 移植到64位GNU/Linux系统",其中详细介绍了64位Linux环境.
根据GCC手册:
__LP64__
_LP64
这些宏定义为值1,if(且仅当)编译是针对目标的,其中long int和指针都使用64位而int使用32位.
这就是你需要的,对吗?
此外,你可以试试
#define __64BIT (__SIZEOF_POINTER__ == 8)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12410 次 |
最近记录: |