2013-03-24 3 views
5

Известна ошибка в gcc 4.7.2 для MinGW, которая вызывает недопустимый указатель this, который должен быть передан виртуальной функции при определенных обстоятельствах, которые включают виртуальное и не виртуальное наследование в том же классе , Подробная информация находится на this Bugzilla page.gcc 4.7.2 ошибка виртуальной функции

Эта ошибка укусила меня, и мне нужно исправить ее для приложения Qt, которое я пишу. На странице Bugzilla есть патч, но как получить рабочую версию, которая включает этот патч? Насколько я могу судить, страница загрузки GNU предоставляет только оригинальную, глючную версию. И следующая версия gcc после 4.7.2 - 4.8.0, которую я не могу использовать, потому что это будет несовместимо с моими Qt-библиотеками.

Должен ли я построить gcc из источников после применения патча? Я, конечно, хочу этого избежать, если смогу!

+0

Альтернативой исправлению компилятора может быть обход ошибки в вашем коде (например, если вы не используете комбинацию функций, вызывающих ошибку). Не знаете, насколько это возможно в вашем случае? – NPE

+0

Нет, боюсь, нет. Даже создание gcc из источника - более привлекательное предложение, чем это: -/ – TonyK

+2

Ouch. Надеюсь, вы найдете простое решение (FWIW, я помню, как давно создал gcc, и это было довольно безболезненно). – NPE

ответ

1

Я взял совет Haroogan (чтобы восстановить Qt из исходного кода), но с GCC 4.8.0 вместо GCC 4.7.1. Это сработало! По крайней мере, я использую его уже три дня, и он пока не удивил. Единственный сбой - это внутренние заголовочные файлы в GCC 4.8.0, к которым применили this patch. Кроме этого, это был простой плавание (т. Е. Мне потребовались только два вечера).

Обновлено для добавления: Теперь я замечаю некоторые проблемы с отладчиком. Так что, возможно, я говорил слишком рано!

Смежные вопросы