Ошибка сегментации Qt, если я не перекомпилирую - PullRequest
1 голос
/ 01 апреля 2011

Я работаю над проектом Qt и часто, когда я делаю кучу изменений и строю, когда я запускаю программу, я получаю случайную ошибку сегментации где-то в рамках Qt.

Чтобы исправить это, я должен восстановить, а затем он уходит.

Я нашел другого человека, у которого была эта проблема, и он получил этот ответ:

из: Ошибка сегментации в каркасе приложения Qt

Это звучит так, как будто ваш система сборки не распознает зависимость и что изменение к этому определение класса не вызывает восстановить то, что должно быть перекомпилируется, когда определение меняется.

Убедитесь, что класс LevelIndicator имеет значение определяется ровно в одном месте (как правило, это будет заголовочный файл который включается какими-либо модулями необходимо использовать объект LevelIndicator). Также убедитесь, что любой глобальный / статический экземпляры объектов LevelIndicator следуют одному правилу определения.

Так что это имеет смысл для меня, однако каждый класс определяется только в одном месте, с защитой #ifndef для предотвращения двойных включений. Так как же мне избежать этого?

1 Ответ

4 голосов
/ 01 апреля 2011

Обычно такие ошибки происходят, если вы изменяете заголовочные файлы, но некоторые исходные файлы не перестраиваются, например, добавляя членов в структуры / классы. В этом отношении особенность обработки зависимостей QMake. Если вы включаете заголовки из других каталогов, используя переменную INCLUDEPATH, вы также должны добавить каталог в переменную DEPENDPATH, чтобы они «отслеживались» на предмет изменений. В противном случае изменения в каталогах INCLUDEPATH не приведут к перестроениям в текущем каталоге. Это должно выглядеть так:

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

Практическое правило. Если вы видите директиву INCLUDEPATH, указывающую на путь внутри вашего проекта без соответствующей директивы DEPENDPATH, почти всегда это неправильно.

См. Также мой ответ на аналогичный вопрос .

...