2009-08-28 14 views
1

64ビットコンピュータで動作するアプリケーションを開発しています。32bit 64bit互換

ただし、変更できない32ビット整数のライブラリを使用しています。 64ビットコンピュータでコンパイルして実行する必要があります。

アプリケーションが動作しているときの意味は?何か回避策はありますか?何かアドバイスのため

多くのおかげで、

+1

これはどのオペレーティングシステムですか? –

+0

Windows XP x86、およびVista x64ビットの場合。私はちょうど整数で計算をすることについて不思議だった。私は間違った答えを得るだろうか? – ant2009

答えて

1

ライブラリのソースはありますか?もしそうなら、それを再コンパイルすると、(ライブラリの作者がx86-64用にコンパイルするときに壊れていた仮定をしていない限り)それを取り除く可能性があります。ハードにテストし、長くテストします。

にソース(i386コンパイル済みバイナリのみ)がない場合、リンカはx86-64コードをリンクすることさえできません。 ABIは互換性がありません。

2番目のケースでは、32ビットライブラリにリンクする別個の32ビットヘルパー/ラッパープロセスを作成し、IPCメカニズムを介して64ビットプロセスからライブラリを呼び出すよう要求する(結果を返す)。 IPCの周りの64ビット側にラッパー関数を作成して、ライブラリーへの通常の呼び出しのようにすることができます。 64ビットプロセスは起動時に32ビットヘルパープロセスを開始する必要があります(親プロセスがなくなったときにヘルパープロセスが終了することを確認してください)。

2

私はあなたが約64ビットを話すとき、あなたがここでのx86とx86_64を意味すると仮定しています。

intは、これらの両方のアーキテクチャで32ビットです。あなたが想定したときに

あなたがに実行する傾向がある唯一の問題は、次のとおりです。

  • sizeof(void*) == sizeof(int)
  • sizeof(int) == sizeof(long)
  • longまたはlong longのサイズが同じサイズです。

そうしないと、あなたは大丈夫です。

+1

"intは常に32ビットです" - そうではありません。唯一の要件は、intが少なくとも16ビットを持ち、 'sizeof(short)<= sizeof(int)&& sizeof(int)<= sizeof(long)'です。実際、intは通常は16ビットシステム上では16ビットです(それ以上のものは多くありません)。 – sepp2k

+0

私はこの質問をしているコンピュータは誰でも、32ビットの整数を持ち、彼はすでにそれを言いました。とにかく私の答えを訂正しました。 –

関連する問題