LINUX.ORG.RU

Что делать при ошибке «cc: internal compiler error: Убито (program cc1)»

 , ,


0

1

Имею свежеустановленный Debian 9 Stable 64 bit на удаленной машине.

Пытаюсь там собрать linphone из исходников с официального сайта:

git clone git://git.linphone.org/linphone-desktop.git --recursive


Процесс сборки (команда make) завершается ошибкой:

[ 48%] Building C object src/CMakeFiles/bellesip.dir/grammars/belle_sip_messageParser.c.o
cc: internal compiler error: Убито (program cc1)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-6/README.Bugs> for instructions.
src/CMakeFiles/bellesip.dir/build.make:1094: ошибка выполнения рецепта для цели «src/CMakeFiles/bellesip.dir/grammars/belle_sip_messageParser.c.o»
make[6]: *** [src/CMakeFiles/bellesip.dir/grammars/belle_sip_messageParser.c.o] Ошибка 4
make[6]: выход из каталога «/opt/linphone/linphone-desktop/WORK/desktop/Build/bellesip»
CMakeFiles/Makefile2:105: ошибка выполнения рецепта для цели «src/CMakeFiles/bellesip.dir/all»
make[5]: *** [src/CMakeFiles/bellesip.dir/all] Ошибка 2
make[5]: выход из каталога «/opt/linphone/linphone-desktop/WORK/desktop/Build/bellesip»
Makefile:160: ошибка выполнения рецепта для цели «all»
make[4]: *** [all] Ошибка 2
...


Версия gcc:

$ gcc --version
gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516


Интересно, что на другой инсталляции Debian (8-ка с накатанными обновлениями) на другой машине, у меня стоит точно такой же компилятор, буква-в-букву. И на нем сборка проходит нормально. На машине 4GB оперативки.

На удаленной машине, где не работает сборка, во время компиляции запустил htop, и увидел, что при компиляции этого файла belle_sip_messageParser.c.o память выжирается полностью. Может, в этом проблема. На удаленной машине стоит 2GB оперативки.

Вопрос: как эту пограмму заставить скомпилироваться на удаленной машине?

★★★★★

Вопрос: как эту пограмму заставить скомпилироваться на удаленной машине?

Сделать 4ГБ swapfile и подключить.

Убивает компилятор ядро по OOM, когда он растекается на какой-нибудь шаблонной дрисне.

EXL ★★★★★ ()
Ответ на: комментарий от EXL

А подсунуть уже скомпиленный файл объектника с другой машины прокатит? Меня беспокоят вкомпиленные пути, потому что после компиляции бинарники этой программы способны работать только если их никуда из своей директории не передвигать. Там дело не только в библиотеках, но и во всяких файлах ресурсов, которые перестают видеться, если бинарник передвинуть. Поэтому и боюсь что в этом объектнике какие-нибудь пути используются, и результат компиляции получится кривой.

Xintrea ★★★★★ ()

На удаленной машине, где не работает сборка, во время компиляции запустил htop, и увидел, что при компиляции этого файла belle_sip_messageParser.c.o память выжирается полностью. Может, в этом проблема.

belle_sip_messageParser.c

Глянь на этот сгенерированный файлик, особенно на его размер:

5566861 Nov 17  2017 linphone-android.git/WORK/android-armv7/Build/bellesip/src/grammars/belle_sip_messageParser.c
 181946 Nov 17  2017 linphone-android.git/WORK/android-armv7/Build/bellesip/src/grammars/belle_sip_messageParser.h

gag ★★★★★ ()
Ответ на: комментарий от Xintrea

А подсунуть уже скомпиленный файл объектника с другой машины прокатит?

Никогда не занимался подобными извращениями. Правильный путь – активировать Swap и завершить компиляцию на нужной тебе целевой машине. Ну или перенести всё скомпилированное разом с той машины, где всё собралось.

Там дело не только в библиотеках, но и во всяких файлах ресурсов, которые перестают видеться, если бинарник передвинуть.

Такого быть не должно, значит ты что-то неправильно делаешь. Ведь эту программу мейнтейнеры дистрибутивов пакетируют и т. д.

EXL ★★★★★ ()
Ответ на: комментарий от EXL

Такого быть не должно, значит ты что-то неправильно делаешь. Ведь эту программу мейнтейнеры дистрибутивов пакетируют и т. д.

Я делаю по документации. Там у make даже цели install нет. Так что как майнтейнеры извращаются - это большой вопрос.

Xintrea ★★★★★ ()

Присоединяюсь к ранее высказавшимся ораторам.

Насчёт свопа. Сделайте так:

От рута:

dd if=/dev/zero of=/swapfile bs=1M count=4096

mkswap /swapfile

swapon /swapfile

После успешной компиляции верните всё назад:

swapoff /swapfile
rm /swapfile

А так-то я бы рекомендовал делать свап-раздел по формуле RAM*2 (если памяти < 16Gb). Если RAM >= 16, то гигов 8 хватит, ну или 16, если не жалко.

Moisha_Liberman ()
Ответ на: комментарий от EXL

Да ёкарный бабай, Qt не той системы.

[ 25%] Building CXX object CMakeFiles/app-library.dir/src/app/App.cpp.o
/opt/linphone/linphone-desktop/src/app/App.cpp: In member function ‘void App::initContentApp()’:
/opt/linphone/linphone-desktop/src/app/App.cpp:304:37: error: ‘version’ is not a member of ‘QLibraryInfo’
     const QVersionNumber &version = QLibraryInfo::version();
                                     ^~~~~~~~~~~~
CMakeFiles/app-library.dir/build.make:557: ошибка выполнения рецепта для цели «CMakeFiles/app-library.dir/src/app/App.cpp.o»
make[6]: *** [CMakeFiles/app-library.dir/src/app/App.cpp.o] Ошибка 1


Совсем забыл. На локальной машине у меня несколько самоустановленных версий Qt стояло, и для сборки я натравливал на Qt 5.11.x, потому что нужен Qt не менее 5.9.x. А в дебиане до сих пор 5.7.x.

То есть, еще как-то нужно в консольном режиме Qt развернуть. Обоженьки...

Xintrea ★★★★★ ()
Ответ на: комментарий от linuxnewbie

И как можно развернуть Qt в неконсольном режиме?

Скачать пакет с инсталлятором с qt.io, у него GUI-шный интерфейс.

Вопрос в разворачивании Qt в консольном режиме.

Xintrea ★★★★★ ()
Ответ на: комментарий от Xintrea

Ну как-то так...

wget http://download.qt.io/official_releases/qt/5.нужная.версия/5.какой.надо/singl...

tar xzf qt-everywhere-opensource-src-5.какой.скачали.tar.gz

Дальше ./configure; make -jчисло_ядер.

Но только боюсь, надо будет ещё кучу зависимостей до конфигурации поставить. Из дебов, наверное, проще будет.

Moisha_Liberman ()
Последнее исправление: Moisha_Liberman (всего исправлений: 1)
Ответ на: Ну как-то так... от Moisha_Liberman

Да я проще сделал. Запоковал с другой машины весь развернутый Qt нужной версии, и перенес на удаленную машину, в такую же директорию.

А сама сборка linphone сделана скриптом:

#!/bin/bash

Qt5_DIR="/opt/qt_5_10_1/5.10.1/gcc_64/lib/cmake"

PATH="/opt/qt_5_10_1/5.10.1/gcc_64/bin/:$PATH"

./prepare.py -DENABLE_JPEG:BOOL=OFF --all-codecs

make -j 4

Xintrea ★★★★★ ()

Использовать zram, использовать дедубликацию страниц памяти, делать большой своп, бежать в магаз за оперативой пока компилится.

pon4ik ★★★★★ ()