Опция -march = native для gcc генерирует различный код в зависимости от архитектуры хоста. ccache не хранит архитектуру машины в своем хеше, что означает, что если вы измените архитектуру машины, например, для переключения на высокопроизводительный узел VPS, кэшированные объектные файлы могут оказаться несовместимыми.
Как я могу убедиться, что я получаю правильные объектные файлы, но при этом использую преимущества кэширования?
ccache
не хранит архитектуру, но хранит флаги компилятора, которые использовались при первом создании объекта. Поэтому потенциальное решение вашей проблемы может заключаться в использовании тонкого сценария-оболочки, который расширит -march=native
к фактическому набору флагов (например, используя что-то вроде этот), прежде чем передать их ccache
,
(Я, конечно, оставлю фактическую реализацию в качестве упражнения для читателя ..)
Вы можете быть уверены, что используете в своей сборочной ферме машины с одинаковыми архитектурами. Кроме того, я не понимаю, как вы можете решить эту проблему.
Также помните, что если вы используете -march=native
тогда любой, кто хочет запустить ваш двоичный файл, должен иметь такую же (или, возможно, более новую, но обратно-совместимую) архитектуру машины. Что может или не может быть проблемой.