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