2015-03-03 4 views
0

Я работаю в проекте, где мы только что добавили параллелизм в нашу систему сборки, используя GNU Make.Может ли GNU создавать создаваемые бинарные файлы при параллельном построении?

Мы строим библиотеки и программы параллельно.

Сначала мы создаем все библиотеки, необходимые для двоичных файлов. После создания libs мы начинаем создавать двоичные файлы.

Теперь при запуске наших программ мы обнаружили, что один из двоичных файлов не работает так, как ожидалось. Возможно ли, что GNU Make может создавать поврежденные двоичные файлы при параллельном построении, но все равно правильно связывать? Если это так, то какая общая причина и как ее можно избежать?

ответ

3

Правильные параллельные сборки зависят от правильного файла makefile. Если сборка работает последовательно, но не параллельно, это означает, что ваш make-файл не объявил все необходимые условия, поэтому make не понимает, что он не может создать цель X до завершения цели Y.

Однако чрезвычайно маловероятно, что эти ошибки позволят построить успешную работу: то есть, компилятор или компоновщик почти всегда терпят неудачу, если вещи строятся в неправильном порядке. Мне трудно представить, как построить будет успех, за исключением самого чистого шанса, если вообще (возможно, если ваши инструменты перезаписывают существующий файл, а не удаляют его и записывают с нуля). Конечно, вы не получили никакой информации о том, что именно «не работает, как ожидалось» означает, что это сложно сказать точно.

Чтобы провести исследование, вам нужно провести некоторое тестирование: не работает ли он одинаково каждый раз, когда вы выполняете параллельную сборку? Это происходит, даже если вы используете разные уровни параллелизма (разные уровни -j)? Продолжается ли отказ, если вы вернетесь к непараллельным сборкам? Сформирована ли конструкция с -j, даже если вы начнете с полностью чистого рабочего пространства (ничего не построено)?

+0

Вы совершенно правы. В конце концов, это оказалось проблемой зависимости, хотя она фактически связывала двоичные файлы раньше. Спасибо за хороший ответ. – Euklides

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