2011-04-01 4 views
1

저는 Qt 프로젝트에서 일하고 있습니다. 프로그램을 실행할 때 Qt 프레임 워크의 임의의 세그먼트 오류가 발생하는 경우가 종종 있습니다.다시 작성하지 않는 한 Qt 분할 오류

문제를 해결하려면 다시 작성해야하며 사라집니다.

나는이 문제를 가지고 다른 사람을 발견하고는이 응답받은 : 이것은 당신의 빌드 시스템은 의존성을 인식하지 않는 것처럼 소리가 있습니다 Segmentation fault in Qt application framework

그 :

에서

을 해당 클래스 정의로 변경하면 정의가 변경 될 때 이 다시 컴파일되어야하는 무언가의 재 구축이 트리거되지 않습니다.

확실히 클래스 LevelIndicator가 (일반적으로 그는 LevelIndicator 객체를 사용하는 어떤 모듈 필요에 의해 포함됩니다 헤더 파일 것) 정확히 한 곳 에 정의되어 있는지 확인합니다. 또한 LevelIndicator 개체 의 인스턴스가 모두 인지 확인한 다음 하나의 정의 규칙을 따르고 있는지 확인하십시오.

하지만 각 클래스는 이중 내포물을 방지하기 위해 #ifndef 가드가있는 한 곳에서만 정의됩니다. 어떻게 이것을 피할 수 있습니까?

+0

OS & 컴파일러를 정의하십시오! – Macke

+0

우분투, gcc (QtCreator 사용) – robev

답변

4

일반적으로 헤더 파일을 변경했지만 일부 소스 파일이 다시 작성되지 않으면 이러한 오류가 발생합니다. 구조체/클래스에 멤버를 추가합니다. QMake의 종속성 처리는 이와 관련하여 특이합니다. INCLUDEPATH 변수를 사용하여 다른 디렉토리의 헤더를 포함하는 경우 변경 사항을 "모니터"하도록 DEPENDPATH 변수에 디렉토리를 추가해야합니다. 그렇지 않으면 INCLUDEPATH 디렉토리의 변경으로 인해 현재 디렉토리의 재구성이 트리거되지 않습니다. 그것은 다음과 같이한다 : 엄지 손가락의

INCLUDEPATH += ../somelib/include 
DEPENDPATH += ../somelib/include 

규칙 : 당신이 INCLUDEPATH 지시어는 거의 항상 잘못, DEPENDPATH 지시어에 해당하지 않고 프로젝트 내부의 경로를 가리키는 참조하십시오.

도 참조하십시오. my answer to a similar question.

+1

예, 우리는 INCLUDEPATH를 사용하고 있지만 DEPENDPATH는 사용하지 않았습니다. – robev