LINUX.ORG.RU

Невоспроизводимые ошибки при компиляции swfmill

 ,


0

1

На 1-ядерном компьютере проблем со сборкой swfmill не было. На новом 6-ядерном — не собиралось. Причём каждый раз компиляция обрывалась с другой ошибкой. Все ошибки — на файлах C++, генерируемых xsltproc из XML. Возникло ощущение, что файл попадает компилятору на обработку до того, как закончит генерироваться.

Попробовал добавить ключ GCC -j1. После этого стало нормально собираться, даже если я указывал -j7.

В чём может быть дело? «Состояние гонки?» Что-то ещё?

На другом форуме посоветовали заменить в мейкфайле

$(CODEGEN_GENERATEDSOURCES) $(CODEGEN_GENERATEDHEADERS): $(CODEGEN_SRC)
        xsltproc $(srcdir)/codegen/mk.xsl $(srcdir)/codegen/source.xml

на

$(CODEGEN_GENERATEDSOURCES) $(CODEGEN_GENERATEDHEADERS): .sources.generated

.sources.generated: $(CODEGEN_SRC)
        xsltproc $(srcdir)/codegen/mk.xsl $(srcdir)/codegen/source.xml
        touch .sources.generated 

Чтобы xsltproc вызывалось строго 1 раз.

Достаточно ли этого? Если да, то как проверить, что исправление помогло? Иногда и при параллельной сборке собирается без ошибок.

Система Gentoo AMD64.

★★★★

А что по этому поводу говорит разработчик swfmill? Некоторые явно говорят, что программу не стоит собирать в несколько потоков.

buddhist ★★★★★
()
Ответ на: комментарий от DELIRIUM

Примеры этих самых разных ошибок где?

К сожалению, не сохранил логи. А потом ошибки внезапно прекратились.

Что помню:

Несколько раз компиляция останавливалась из-за незакрытых скобок. Я лез в исходники и проверял соответствующие строки — все скобки были на месте.

Ещё вылетало из-за необъявленных переменных или функций, например, «Trac». Такого имени я не нашёл, но зато нашёл правильно объявленную «Trace».

Поэтому и предположил, что GCC пытался компилировать недогенерированный файл.

acheron ★★★★
() автор топика
Ответ на: комментарий от buddhist

А что по этому поводу говорит разработчик swfmill?

Сейчас сочиняю письмо ему в список рассылки.

Некоторые явно говорят, что программу не стоит собирать в несколько потоков.

Ничего такого в документации не заметил.

Если писать про ошибку, лучше сразу предложить решение. Сработает ли приведённое выше?

Например, если в Makefile правило для создания gSWFWriteXML.o требует наличия gSWFWriteXML.cpp, а правило для создания gSWFWriteXML.cpp требует наличия .sources.generated, то будет ли компилироваться gSWFWriteXML.cpp, если .sources.generated ещё не создан?

acheron ★★★★
() автор топика
Ответ на: комментарий от max_udoff

Некоторые программы просто не собираются в несколько потоков.

Значит, их надо исправить :)

Хотя бы чтобы сами не давали себя в несколько потоков собирать.

acheron ★★★★
() автор топика
Ответ на: комментарий от acheron

в любом случае вам на bugs.gentoo.org

Прочёл только последнюю строку?

Система Gentoo AMD64

не вижу никакой связи с такой строкой и гентушной багзиллой.

У тебя возникли ошыбки при сборке пакета из дерева. ты нашел workaround. так почему бы не поделится им со всеми?

ZuBB ★★★★★
()
Ответ на: комментарий от ZuBB

У тебя возникли ошыбки при сборке пакета из дерева.

Нет. Его нет в дереве.

ты нашел workaround.

Не знаю. Поэтому спрашиваю, как убедиться, что он работает.

так почему бы не поделится им со всеми?

Обязательно. И на форуме gentoo.org, где уже создал тему, и в багзилле, где этот баг висит без движения с прошлого года, и в рассылке программы, где активность 1 письмо в месяц.

Но сперва я хочу разобраться с тем, как работает make. И как воспроизводить такие случайные ошибки. Применительно к любому дистрибутиву. Под Убунту так же глючит.

acheron ★★★★
() автор топика
Ответ на: комментарий от acheron

Например, если в Makefile правило для создания gSWFWriteXML.o требует наличия gSWFWriteXML.cpp, а правило для создания gSWFWriteXML.cpp требует наличия .sources.generated, то будет ли компилироваться gSWFWriteXML.cpp, если .sources.generated ещё не создан?

Не будет. Фикс вроде верный.

Sectoid ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.