1

この質問にはすでにいくつかの回答があることは知っていますが、なぜこのエラーが発生し続けるのか理解できないようです。

説明は次のとおりです。Windows 7 x64をインストールした64ビットマシンがあります。Windows で GCC (CodeBlocks) の下でコードをコンパイルしていますが、まったく問題はありません。次に、アプリケーションは移植可能でなければならないと判断し、Linux 上の GCC でコンパイルすることにしました。私の他の 32 ビット マシンでは、コードは問題なくコンパイルされています。しかし、私の 64 ビット マシンでは、Ubuntu を Wubi としてインストールすることにしました。もちろん、Wubi x64 バージョンもインストールしました。

Ubuntu を Wubi に正常にインストールし、必要なものをすべてインストールしましたが、プロジェクトをコンパイルしようとすると、最初の行に「選択した cpu は x86-64 命令セットをサポートしていません」というエラーが表示されます。わかりました、64ビットマシンのWindows 7 x64にWubi x64をインストールしたことを考えると、これは私にはまったく意味がないように思えます。では、CPU が x86-64 命令セットをサポートしていないというエラーが表示されるのはなぜでしょうか?

通常の方法でルートに Ubuntu をインストールするのではなく、WUBI をインストールしたことが原因でしょうか? 私は本当にこれを手に入れることができないようです。

どうもありがとうございました

編集: OK、コードブロックのどこかで、「Pentium M」アーキテクチャ用にチェックされたオプションを見つけました。チェックを外したところ、次のようないくつかのエラーが発生しました。

エラー: void* から int へのキャストは精度を失います。

これが Linux でのみ発生し、Windows では発生しない理由は何ですか?

4

1 に答える 1

9

このコメントに基づいて:

編集: OK、Codeblocks のどこかで、「Pentium M」アーキテクチャ用にチェックされたオプションを見つけました。チェックを外したところ、次のようないくつかのエラーが発生しました。

これがコンパイルの問題の原因でした。「Pentium M」は 32 ビット アーキテクチャです。CodeBlocks の下の gcc は、Windowsでデフォルトで 32 ビット コードを生成します。

エラー:

エラー: void* から int へのキャストは精度を失います。

これは、Linux x64 での 64 ビットのモデルがLP64、 wheresizeof(long) == sizeof(pointer) == 64bitsであり、ポインター ( ) ( 64 ビット) を (32 ビット)sizeof(int) == 32bitsに押し込もうとしているために発生し、ポインター情報が失われます。void *int

このようなコンパイル エラーが発生した場合、コードが 64 ビット クリーンではない可能性が高くなります。

これが Linux でのみ発生し、Windows では発生しない理由は何ですか?

-m32Linux on x64 は、デフォルトで 64 ビット アプリケーションを生成します。プログラムが 32 ビット コードを生成するようにするには、プログラムのビルド オプションに追加する必要があります (これを行うための CodeBlocks ターゲット オプションがおそらくあります)。

于 2012-10-18T09:56:44.153 に答える