回答:
CPUが64ビット、32ビット、または両方に対応しているかどうかは、のflags
行をチェックすることで確認でき/proc/cpuinfo
ます。アーキテクチャファミリで考えられるフラグを知る必要があります。たとえば、i386 / amd64プラットフォームでは、lm
フラグはamd64対応のCPUを識別します(そのフラグを持たないCPUはi386のみです)。
grep -q '^flags\s*:.*\blm\b' /proc/cpuinfo # Assuming a PC
を使用してアーキテクチャを照会すると、カーネルが32ビットか64ビットかを確認できますuname -m
。たとえば、i[3456]86
32ビットx86_64
で64ビットです。いくつかのアーキテクチャでは、64ビットカーネルが32ビットユーザーランドプログラムを実行できるためuname -m
、64ビットカーネルが表示されていても、64ビットライブラリが利用できる保証はありません。
[ "$(uname -m)" = "x86_64" ] # Assuming a PC
またuname -m
、「仮想化された」値を返す場合があることに注意してください。たとえば、Linuxでは、setarch i386 bash
amd64システムで実行しuname -m
、そのbashから実行すると、uname -m
レポートが表示されますi386
。これにより、たとえば、クロスコンパイルを設定せずに32ビットプログラムをコンパイルするなど、カーネルが64ビットであるにもかかわらず、「32ビットシステム」にいるふりをすることができます。
コマンドでLSBサポートを照会することにより、ユーザーランドで利用可能なものを確認できますlsb_release
。より正確には、サポートされているLSB機能の区切りリストをlsb_release -s
出力し:
ます。各機能にはの形式があります。たとえば、ix86 Cライブラリの可用性はで示されますが、amd64の類似物です。ただし、すべてのディストリビューションが使用可能なすべてのLSBモジュールを宣言しているわけではないため、この方法で検出可能な数より多くのディストリビューションが使用できる場合があります。module-version-architecture
core-2.0-ia32
core-2.0-amd64
開発用に推奨されるワードサイズを調べるには(Cコンパイラが利用可能な場合)、印刷sizeof(void*)
またはを出力する5行のCプログラムをコンパイルしsizeof(size_t)
ます。
getconf WORD_BIT
かgetconf LONG_BIT
(それはあるものの、些細な、およびポータブル)独自のCプログラムをコンパイルするのではなく。
getconf
ここで使用することを考えていませんでした。原理的にはいいように聞こえますが、複数のC ++コンパイラが存在する場合(通常はgcc / iccなど、Linuxではgcc / native cc)、使用する特定のCコンパイラに結果を適用するのは困難です。標準システムでgetconf
は、c89
またはc99
に適用する必要があります$(getconf PATH)
が、実際にはcc
、ベンダーc89
ラッパーによって実行される代替をインストールする人がいるかもしれません。
.
正規表現に欠落があります:grep '^flags.*:.*\blm\b' /proc/cpuinfo
。またそれだけでなくて私の作品-q
旗
.
。「ゼロ以上のスペース」がありましたが、実際にはタブがあります。タブも許可するように正規表現を変更しました。-q
フラグ、そこには出力ませんが、コマンドの終了ステータスは、フラグが存在するかどうかを示します。出力する場合は、-q
フラグを削除します。
-q
旗について知らなかった。Ty、今すぐ動作します:)
あなたは使用することができるuname -a
ためと見てx86_64
、あなたが64ビットを実行しているかどうかを確認します。それ以外は(私の知る限りでは)、あなたは、32ビットを実行しているか、などの非PCのハードウェア上にあるalpha
、sparc
または、ppc64
。
alpha
、sparc64
、ppc64
、...
タイプ:
uname -a
あなたが取得する場合 x86_64 GNU/Linux
、64ビットカーネルを実行しています。あなたが似たようなものを手に入れたらi386/i486/i586/i686
、おそらく32ビットカーネルを実行しています
getconfは、使用するシステムコールを最も少なくします。
$ strace getconf LONG_BIT | wc -l
253
$ strace arch | wc -l
280
$ strace uname -m | wc -l
281
$ strace grep -q lm /proc/cpuinfo | wc -l
301