Windows (Intel x86 아키텍처)에서 VS-2008을 사용하여 Theora video deocder 라이브러리 및 응용 프로그램을 컴파일했습니다. 나는이 설정을 사용하여 theora 비트 스트림 (*. ogg 파일)을 디코딩합니다. 이 디코더 라이브러리의 소스 코드는 Windows-VS-2008 조합에서 컴파일되도록 일부 수정 된 FFMPEG v0.5 소스 패키지에서 사용됩니다.출력 이유 Linux-gcc 컴파일 된 C 코드 출력과 MS-VS2008 컴파일 된 출력 간의 1 비트 차이점은 무엇입니까?
이제 gcc를 사용하여 빌드 한 Linux (Intel x86 아키텍처)에서 ffmpeg (V0.5) 응용 프로그램을 사용하여 동일한 Theora 비트 스트림을 디코딩하고 일부 디코딩 된 출력 yuv 파일을 얻으면이 출력 파일은 다음과 같은 1 비트 차이가 있습니다. 출력은 Windows-VS2008 설정에서 얻었으며, 출력 파일의 몇 바이트는 전부가 아닙니다. 나는 2 개의 출력이 비트 매치가 될 것으로 예상했다.
내가 요소 아래에 의심하고 있습니다 :
을 a)는 두 개의 컴파일러 GCC 및 MS-VS2008 사이의 일부 데이터 유형이 일치하지 않습니다.?
b.) 코드가 log, pow, exp, cos 등의 런타임 수학 라이브러리 함수를 사용하지 않는다는 것을 확인했지만 여전히 내 코드에는 (a + b + c) /3. 이것이 문제가 될 수 있습니까?
이 "3으로 나누기"또는 다른 숫자의 구현은 두 가지 설정에서 다를 수 있습니다.
c.) 어떤 종류의 반올림/잘림 효과가 다르게 발생합니까?
d.) Windows 설치에없는 makefile/configure 옵션으로 Linux에있는 모든 매크로가 누락 될 수 있습니까?
그러나 문제와 그 문제를 해결할 수 없습니다.
1.) 위의 질문이 유효합니까? 아니면이 두 가지 설정에 의해 생성 된 출력에 이러한 1 비트 차이가 발생할 수있는 다른 문제가있을 수 있습니다.
2.) 어떻게 디버그하고 수정합니까?
것 같아요, 리눅스 GCC 설치 및 Windows MS 컴파일러 사이의 출력 차이의이 시나리오 (비디오 디코더 응용 프로그램 내 경우 특정 반드시) 어떤 일반적인 코드에 대한 사실조차 할 수
모든 포인터는 것 이것에 관해 도움이 되십시오.
덕분에, 일부 부동 소수점 LIB
2의
-AD
MSVC
/fp:fast /arch:SSE2
에 대한플래그 SSE는 내 대답은 도움이 되었습니까? 문제를 해결 했습니까? 방법? – osgx
@osgx : 당신의 대답은 ffmpeg를 구성하는 동안 mmx 최적화를 비활성화하는 지침을주었습니다. 빌드 후, 그것은 나를 위해 일했습니다. 감사. – goldenmean