2013-03-25 4 views
3

I once had a problem 오래된 릴리스 DLL에서 충돌이 발생했지만 디버그에서 작동했습니다. 최적화 수준을 낮추면 문제가 해결됩니다. 나는 정확하게 기억한다면 Qt 4.7을 사용했다.Qt에서 어떻게 최적화 수준을 확인할 수 있습니까?

이제 Qt 5.0.1로 업그레이드 한 후에도 동일한 충돌이 다시 발생하지만 디버그와 릴리스 모두에서 발생합니다. 나는 새로운 Qt는의 최적화 레벨을 설정하는 방법을 발견하지만, 어떤 효과가 보이지 않는다 : 그 설정이 적용되어 있는지 확인하려면 어떻게

QMAKE_CXXFLAGS_DEBUG 

에 대한 유사

QMAKE_CXXFLAGS_RELEASE -= -O 
QMAKE_CXXFLAGS_RELEASE -= -O1 
QMAKE_CXXFLAGS_RELEASE -= -O2 
QMAKE_CXXFLAGS_RELEASE -= -O3 

QMAKE_CXXFLAGS_RELEASE += -O 

을 ? 문제가 Qt 4.7에 있던 것과 동일한 지 또는 전혀 관련이 없는지를 알아야합니다. Qt 4.7 릴리스에서 높은 최적화로 문제가 발생한 것과 같은 함수 인 DLL에서 특정 함수를 호출 할 때 충돌이 발생합니다.

SDK가 더 이상 다운로드 할 수 있습니다 나는조차 쉽게, Qt는 4.7로 다운 그레이드 할 수 없습니다, 그래서 아주 오래되고 정확한와 Mingw 버전을 필요, 나는 작은 버전의 차이가 큰 문제를 일으킬 것을 알고있다.

+0

대부분의 경우 실제 문제는 코드의 다른 곳에서 발생하며 충돌이 발생하거나 발생하는 것은 해당 플래그의 ** 부작용 **입니다 (특히, Qt 5에서는 설정에 관계없이 나타납니다). valgrind 및/또는 디버거를 사용하려고 했습니까? –

+0

@ Andreas : 디버거를 사용하여 DLL에서 해당 악명 높은 함수를 호출 할 때 충돌이 발생하는지 확인했습니다. Qt 4.7에서는 같은 장소에서 충돌이 발생했으며 최적화 설정이 변경되어 해결되었습니다. 이 함수를 호출하지 않아도 충돌이 발생하지 않습니다. 그것은 DLL에 내재 된 문제 일 수 있습니다, 불행히도, 나는 그것에 대한 소스가 없습니다. – vsz

+0

DLL의 릴리스 및 디버그 버전이 있습니까? 그것과 관련이있을 수 있습니다. – Phlucious

답변

1

응용 프로그램을 qmake하면 명확하게 어떤 최적화 수준이 적용되었는지 확인할 수 있습니다. (콘솔 출력 로그에서)

관련 문제