views:

154

answers:

3

Doing cross platform development with 64bit. Using gcc/linux and msvc9/server 2008. Just recently deployed a customer on windows and during some testing of upgrades I found out that although std::streamoff is 8 bytes, the program crashes when seeking past 4G.

I immediately switched to stlport which fixes the problem, however stlport seems to have other issues. Is STL with msvc9 really that broken, or am I missing something?

Since the code is cross platform I have zero interest in using any win32 calls.

Related

+1  A: 

Even though you say that you have "zero" interest in using "win32" calls, it situations like this your stuck between a rock and a hard place.

I would just implement my own version of a file iostream using the "win32" calls that looks and feels like the fstream interfaces. This is easy to do and I've done it hundreds of times.

Call it say 'fstreamwin32'.

Then I would have a header file that would do something like:

#ifdef WIN32
typedef fstreamwin32 fsteamnative;
#else
typedef fstream fsteamnative;
#endif

Then I would use fsteamnative everywhere. That way you keep your code cross platform and still solve your problem.

If the problem is ever fixed, you can easily remove your "win32" workaround by changing your typedef back to using fstream typedef. This is why lots of cross platform codebases have lots of levels of indirection (e.g. by using their own typedef's for standard stuff) so that they are do stuff like this would having to change a lot of code.

Shane Powell
A: 

Another link I found on this subject:

http://cplusplus.com/forum/general/6813/

A: 

I ended up using STLport. The biggest difference with STLport being that some unit tests which crashed during multiplies of double precision numbers now work and those unit tests pass. There are some other differences with relative precision popping up but those seem to be minor.