MSVC9, iOStream 및 2G/4G Plus 파일
-
06-09-2019 - |
문제
64 비트로 크로스 플랫폼 개발을 수행합니다. 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를 사용할 것입니다. 그렇게하면 코드 크로스 플랫폼을 유지하고 여전히 문제를 해결합니다.
문제가 해결되면 FSTREAM TypEdef를 사용하여 TypEdef를 다시 변경하여 "Win32"해결 방법을 쉽게 제거 할 수 있습니다. 그렇기 때문에 많은 크로스 플랫폼 코드베이스가 많은 수준의 간접 (예 : 표준 재료에 자체 typedef를 사용하여)을 가지고있어 많은 코드를 변경해야합니다.
이 주제에서 찾은 또 다른 링크 :