Файлы msvc9, iostream и 2g / 4g plus - PullRequest
2 голосов
/ 30 мая 2009

Создание кроссплатформенной разработки с 64-битной Использование gcc / linux и msvc9 / server 2008. Совсем недавно развернул клиент на Windows, и во время некоторого тестирования обновлений я обнаружил, что, хотя std :: streamoff составляет 8 байт, программа вылетает при поиске за 4G.

Я немедленно переключился на stlport, который исправляет проблему, однако, похоже, у stlport есть другие проблемы. STL с msvc9 действительно сломан, или я что-то упустил?

Поскольку код кроссплатформенный, я не заинтересован в использовании вызовов win32.

Относящиеся

Ответы [ 3 ]

1 голос
/ 30 мая 2009

Даже если вы говорите, что у вас "нулевой" интерес к использованию вызовов "win32", в таких ситуациях вы застряли между молотом и наковальней.

Я бы просто реализовал свою собственную версию файла iostream, используя вызовы "win32", которые выглядят как интерфейсы fstream. Это легко сделать, и я делал это сотни раз.

Назовите это, скажем, «fstreamwin32».

Тогда у меня будет заголовочный файл, который будет делать что-то вроде:

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

Тогда я бы везде использовал fsteamnative. Таким образом, вы сохраняете свой код кроссплатформенным и все еще решаете свою проблему.

Если проблема когда-либо будет устранена, вы можете легко удалить обходной путь «win32», вернув обратно typedef, используя fstream typedef. Вот почему многие кроссплатформенные кодовые базы имеют много уровней косвенности (например, используя свои собственные typedef для стандартных вещей), так что они делают такие вещи, как если бы пришлось менять большое количество кода.

0 голосов
/ 01 июня 2009

Я закончил с использованием STLport. Самым большим отличием STLport является то, что некоторые модульные тесты, которые разбились во время умножения чисел двойной точности, теперь работают, и эти модульные тесты проходят. Существуют и другие различия с относительной точностью, но они кажутся незначительными.

0 голосов
/ 01 июня 2009

Другая ссылка, которую я нашел на эту тему:

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

...