문제

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를 사용하여)을 가지고있어 많은 코드를 변경해야합니다.

이 주제에서 찾은 또 다른 링크 :

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top