Make -j 8 g++: внутренняя ошибка компилятора: убит (программа cc1plus)
Когда я развертываю Apache Mesos на Ubuntu12.04, я следую официальному документу, на шаге "make -j 8" я получаю эту ошибку в консоли:
g++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.9/README.Bugs> for instructions.
make[2]: *** [slave/containerizer/mesos/libmesos_no_3rdparty_la-containerizer.lo] Error 1
make[2]: *** Waiting for unfinished jobs....
mv -f log/.deps/liblog_la-log.Tpo log/.deps/liblog_la-log.Plo
mv -f slave/containerizer/.deps/libmesos_no_3rdparty_la-docker.Tpo slave/containerizer/.deps/libmesos_no_3rdparty_la-docker.Plo
mv -f log/.deps/liblog_la-consensus.Tpo log/.deps/liblog_la-consensus.Plo
mv -f slave/containerizer/.deps/libmesos_no_3rdparty_la-external_containerizer.Tpo slave/containerizer/.deps/libmesos_no_3rdparty_la-external_containerizer.Plo
mv -f log/.deps/liblog_la-coordinator.Tpo log/.deps/liblog_la-coordinator.Plo
mv -f slave/.deps/libmesos_no_3rdparty_la-slave.Tpo slave/.deps/libmesos_no_3rdparty_la-slave.Plo
mv -f master/.deps/libmesos_no_3rdparty_la-master.Tpo master/.deps/libmesos_no_3rdparty_la-master.Plo
make[2]: Leaving directory `/root/Mesos/mesos/build/src'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/root/Mesos/mesos/build/src'
make: *** [all-recursive] Error 1
что мне делать?
Ответы
Ответ 1
Попробуйте запустить (сразу после сбоя) dmesg.
Вы видите такую строку?
Out of memory: Kill process 23747 (cc1plus) score 15 or sacrifice child
Killed process 23747, UID 2243, (cc1plus) total-vm:214456kB, anon-rss:178936kB, file-rss:5908kB
Скорее всего, это ваша проблема. Запуск make -j 8 запускает много процессов, которые используют больше памяти. Проблема выше возникает, когда в вашей системе заканчивается память. В этом случае, а не вся система падает, операционные системы запускают процесс для оценки каждого процесса в системе. Операционная система убивает тот, который набирает наивысший уровень, чтобы освободить память. Если процесс, который был убит, - cc1plus, gcc (возможно, неправильно) интерпретирует это как сбой процесса и, следовательно, предполагает, что он должен быть ошибкой компилятора. Но это не так, проблема в том, что ОС убил cc1plus, а не разбился.
Если это так, у вас заканчивается память. Так что бегите, возможно, сделайте -j 4. Это будет означать меньшее количество параллельных заданий и будет означать, что компиляция займет больше времени, но, надеюсь, не исчерпает вашу системную память.
Ответ 2
Это было ключом в моем сценарии (компиляция мезо на CentOS 7) в экземпляре AWS EC2.
Я исправил его, увеличив память и процессор до не менее 4 Гбит и 2 vCPU.
Ответ 3
(может быть проблема с памятью)
Для тех, кто все еще борется с этим (через 2 года после того, как был задан вопрос), этот трюк на CryptoCurrencyTalk, который, кажется, делает это работа.
Для удобства я вставляю его здесь:
Запустите эти
-
sudo dd if=/dev/zero of=/swapfile bs=64M count=16
-
sudo mkswap /swapfile
-
sudo swapon /swapfile
Это позволит вам скомпилировать ваш код. Но убедитесь, что вы затем вернули swapon
после компиляции:
-
sudo swapoff /swapfile
-
sudo rm /swapfile