msvc9、iostream、および 2g/4g plus ファイル
-
06-09-2019 - |
質問
64bitでクロスプラットフォーム開発を行っています。gcc/linux および msvc9/server 2008 を使用します。つい最近、ある顧客を Windows に導入したところ、アップグレードのテスト中に、std::streamoff が 8 バイトであるにもかかわらず、4G を超えてシークするとプログラムがクラッシュすることがわかりました。
すぐに stlport に切り替えたところ問題は解決しましたが、stlport には別の問題があるようです。msvc9 を使用した STL は本当に壊れているのでしょうか、それとも何かが足りないのでしょうか?
コードはクロスプラットフォームであるため、win32 呼び出しを使用することにまったく興味がありません。
関連している
解決 3
私はSTLportのを使用して終了しました。 STLportのは、倍精度数の乗算中に墜落したいくつかのユニットテストは、現在動作していることであり、かつ、それらのユニットテストに合格して最大の違い。そこポップアップ相対精度で他のいくつかの違いがあるが、それらは軽微であると思わます。
他のヒント
あなたが「win32の」呼び出しを使用して「ゼロ」興味を持っていることを言うにもかかわらず、このようなことな状況では、あなたのロックやハードの場所の間で立ち往生しています。
私はただ見て、fstreamのインタフェースのように感じている「win32の」呼び出しを使用して、ファイルのiostreamの私の独自のバージョンを実装します。これを行うのは簡単ですし、私はそれを何百回もやった。
'fstreamwin32' と言う、それを呼び出します。
そして、私のような何かをするだろうヘッダファイルを持つことになります:
#ifdef WIN32
typedef fstreamwin32 fsteamnative;
#else
typedef fstream fsteamnative;
#endif
それから私は、どこにでもfsteamnative使用します。そうすれば、あなたのコードのクロスプラットフォームを維持し、まだあなたの問題を解決します。
問題は、これまで固定されている場合は、、簡単にあなたのtypedefを変更するバックへのfstreamのtypedefを使用して、「win32の」回避策を削除することができます。彼らはこのようなものは、多くのコードを変更することでしょうかされているように、クロスプラットフォームのコードベースの多くは(例えば、標準的なもののためのtypedefの自分自身を使用して)間接のレベルがたくさんある理由はここにあります。
私はこのテーマで見つかった別のリンク: