[英]How to identify a 64 Bit build on Linux using the preprocessor?
我即將將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
要么
#include <limits.h>
#if ( __WORDSIZE == 64 )
#define BUILD_64 1
#endif
雖然第一個是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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.