使用64位进行跨平台开发。使用gcc / linux和msvc9 / server 2008。 最近刚刚在Windows上部署了一个客户,在升级测试期间,我发现尽管std :: streamoff是8个字节,但程序在寻求过去4G时崩溃了。
我立即切换到修复问题的stlport,但是stlport似乎还有其他问题。带有msvc9的STL真的坏了,还是我错过了什么?
由于代码是跨平台的,我对使用任何win32调用没有兴趣。
答案 0 :(得分:1)
即使你说你对使用“win32”电话有“零”兴趣,但这种情况会像你一样陷入摇滚和硬地之间。
我只是使用看起来像fstream接口的“win32”调用来实现我自己的文件iostream版本。这很容易做到,我已经完成了数百次。
称之为'fstreamwin32'。
然后我会有一个头文件,它会做类似的事情:
#ifdef WIN32
typedef fstreamwin32 fsteamnative;
#else
typedef fstream fsteamnative;
#endif
然后我会到处使用fsteamnative。这样您就可以保持代码跨平台并仍能解决问题。
如果问题得到解决,您可以通过将typedef更改回使用fstream typedef来轻松删除“win32”变通方法。这就是为什么许多跨平台代码库具有很多层次的间接(例如,通过使用他们自己的typedef用于标准的东西),所以他们做这样的事情就不得不改变很多代码。
答案 1 :(得分:0)
我在这个主题上找到的另一个链接:
答案 2 :(得分:0)
我最终使用STLport。与STLport最大的区别在于,在双倍精度数乘以期间崩溃的某些单元测试现在可以正常工作并且单元测试通过了。在弹出相对精度方面存在一些其他差异,但这些差异似乎很小。