64ビットコンピュータで動作するアプリケーションを開発しています。32bit 64bit互換
ただし、変更できない32ビット整数のライブラリを使用しています。 64ビットコンピュータでコンパイルして実行する必要があります。
アプリケーションが動作しているときの意味は?何か回避策はありますか?何かアドバイスのため
多くのおかげで、
64ビットコンピュータで動作するアプリケーションを開発しています。32bit 64bit互換
ただし、変更できない32ビット整数のライブラリを使用しています。 64ビットコンピュータでコンパイルして実行する必要があります。
アプリケーションが動作しているときの意味は?何か回避策はありますか?何かアドバイスのため
多くのおかげで、
ライブラリのソースはありますか?もしそうなら、それを再コンパイルすると、(ライブラリの作者がx86-64用にコンパイルするときに壊れていた仮定をしていない限り)それを取り除く可能性があります。ハードにテストし、長くテストします。
にソース(i386コンパイル済みバイナリのみ)がない場合、リンカはx86-64コードをリンクすることさえできません。 ABIは互換性がありません。
2番目のケースでは、32ビットライブラリにリンクする別個の32ビットヘルパー/ラッパープロセスを作成し、IPCメカニズムを介して64ビットプロセスからライブラリを呼び出すよう要求する(結果を返す)。 IPCの周りの64ビット側にラッパー関数を作成して、ライブラリーへの通常の呼び出しのようにすることができます。 64ビットプロセスは起動時に32ビットヘルパープロセスを開始する必要があります(親プロセスがなくなったときにヘルパープロセスが終了することを確認してください)。
私はあなたが約64ビットを話すとき、あなたがここでのx86とx86_64を意味すると仮定しています。
int
は、これらの両方のアーキテクチャで32ビットです。あなたが想定したときに
あなたがに実行する傾向がある唯一の問題は、次のとおりです。
sizeof(void*) == sizeof(int)
sizeof(int) == sizeof(long)
long
またはlong long
のサイズが同じサイズです。そうしないと、あなたは大丈夫です。
"intは常に32ビットです" - そうではありません。唯一の要件は、intが少なくとも16ビットを持ち、 'sizeof(short)<= sizeof(int)&& sizeof(int)<= sizeof(long)'です。実際、intは通常は16ビットシステム上では16ビットです(それ以上のものは多くありません)。 – sepp2k
私はこの質問をしているコンピュータは誰でも、32ビットの整数を持ち、彼はすでにそれを言いました。とにかく私の答えを訂正しました。 –
これはどのオペレーティングシステムですか? –
Windows XP x86、およびVista x64ビットの場合。私はちょうど整数で計算をすることについて不思議だった。私は間違った答えを得るだろうか? – ant2009