Способ работы distcc заключается в локальной обработке входных файлов до тех пор, пока не будет создан один модуль преобразования файлов.Затем этот файл отправляется по сети и компилируется.На этом этапе удаленному серверу distcc нужен только компилятор, ему даже не нужны файлы заголовков для проекта.Выходные данные компиляции затем перемещаются обратно на клиент и сохраняются локально как объектный файл.Обратите внимание, что это означает, что не только связывание, но и предварительная обработка выполняется локально.Такое разделение работы является общим для других инструментов сборки, таких как ccache (предварительная обработка всегда выполняется, затем он пытается разрешить ввод с ранее кэшированными результатами, а в случае успеха возвращает двоичный файл без перекомпиляции).
Если выДля реализации распределенного компоновщика вам нужно будет либо убедиться, что все узлы в сети имеют одинаковую конфигурацию, либо вы должны будете отправить все необходимые входные данные для операции в одном пакете.Это подразумевало бы, что распределенная компиляция создаст набор объектных файлов, и все эти объектные файлы должны быть переданы по сети для удаленной системы, чтобы связать и вернуть связанный файл.Обратите внимание, что для этого могут потребоваться системные библиотеки, которые упоминаются и присутствуют в пути компоновщика, но не присутствуют в командной строке компоновщика, поэтому «предварительная ссылка» должна была бы определить, какой набор библиотек фактически требуется отправить.Даже если это возможно, для этого потребуется, чтобы локальная система угадывала / вычисляла все реальные зависимости и отправляла их с большим влиянием на сетевой трафик и могла фактически замедлить процесс, так как стоимость отправки может быть больше, чем стоимость связывания --ifстоимость получения зависимостей сама по себе не так высока, как связывание.
Проект, над которым я сейчас работаю, имеет один статически связанный исполняемый файл более 100M.Статические библиотеки различаются по размеру, но если распределенная система сочтет, что конечный исполняемый файл должен быть связан удаленно, то это потребует, вероятно, в три-пять раз больше сетевого трафика, чем конечного исполняемого файла (шаблоны, встроенные строки ... все это появляется во всехединицы перевода, которые включают их, поэтому по сети будет летать несколько копий.