web-dev-qa-db-fra.com

make -j 8 g ++: erreur interne du compilateur: mort (programme cc1plus)

Lorsque je déploie Apache Mesos sur Ubuntu12.04, je suis le document officiel. À l'étape "make -j 8", cette erreur s'affiche dans la console:

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

que devrais-je faire?

17
pugna

Essayez de lancer (juste après l'échec) dmesg. 

Voyez-vous une ligne comme ça? 

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

Très probablement, c'est votre problème. Lancement de make -j 8 exécute de nombreux processus qui utilisent plus de mémoire. Le problème ci-dessus se produit lorsque votre système manque de mémoire. Dans ce cas, plutôt que le système tout entier tombe en panne, les systèmes d'exploitation exécutent un processus pour évaluer chaque processus sur le système. Celui qui obtient le score le plus élevé est tué par le système d'exploitation pour libérer de la mémoire. Si le processus tué est cc1plus, gcc (peut-être de manière incorrecte) l'interprète comme un processus en panne et suppose donc qu'il s'agit d'un bogue du compilateur. Mais ce n’est pas vraiment le problème, c’est le système d’exploitation tué cc1plus, plutôt qu’il s’est écrasé. 

Si tel est le cas, vous manquez de mémoire. Alors lancez peut-être -j 4 à la place. Cela signifiera moins de travaux parallèles et signifiera que la compilation prendra plus de temps mais n'espère pas épuiser la mémoire de votre système. 

39
Jon Combe

(Pourrait être un problème de mémoire)}

Pour ceux qui ont encore du mal à le faire (plus de 2 ans après que la question a été posée), il y a cette astuce sur CryptoCurrencyTalk qui semble le faire fonctionner.

Pour plus de commodité, je le colle ici:

Exécuter ces

  • Sudo dd if=/dev/zero of=/swapfile bs=64M count=16
  • Sudo mkswap /swapfile
  • Sudo swapon /swapfile

Cela devrait vous permettre de compiler votre code. Mais assurez-vous de rétablir la swapon après la compilation, avec ceux-ci:

  • Sudo swapoff /swapfile
  • Sudo rm /swapfile
7
ribbit

C'était la clé de mon scénario (compilation de mesos sur CentOS 7) sur une instance AWS EC2.

Je l'ai corrigé en augmentant la mémoire et l'unité centrale à au moins 4 Go et 2 vCPU.

1
Traiano Welcome

vérifiez si le swap est déjà activé sur votre installation Centos en tapant:

Sudo swapon --show

Si la sortie est vide, cela signifie que l’espace de permutation n’est pas activé sur votre système.

Créer un fichier d'échange

1.créer un fichier qui sera utilisé comme espace de swap. compter signifie 1024M * 1024 = 1G

Sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576

2.Assurez-vous que seul l'utilisateur root peut lire et écrire le fichier d'échange:

Sudo chmod 600 /swapfile

3. Configurez une zone de swap Linux sur le fichier

Sudo mkswap /swapfile

4.activer l'échange

Sudo swapon /swapfile

5. "Sudo swapon --show" ou "Sudo free -h", vous verrez l'espace de swap.

0
Li Yingjun