Я пытаюсь построить проект в QNX Momentics IDE (4.6), используя qcc в Linux. Мне не удалось завершить процесс сборки со следующей ошибкой:
virtual memory exhausted: Cannot allocate memory
/opt/qnx641/host/linux/x86/usr/lib/gcc/i386-pc-nto-qnx6.4.0/4.3.3/cc1plus error 1
Проект имеет файл cpp с более чем 1,3 MLOC. Этот код представляет собой автоматически сгенерированный код из большой имитационной модели Matlab / SIMULINK, поэтому разделить и победить нелегко.
Трудно понять, является ли это пределом LOC компилятора qcc или из-за практики программирования в сгенерированном коде.
Я бы хотел спросить:
virtual memory exhausted
проблема cc1plus?Q1: есть ли ограничение размера исходного файла для qcc?
A1: qcc = gcc. Точнее: qcc — это легкая оболочка, которая вызывает gcc; вся настоящая работа выполняется gcc. Программное обеспечение GNU, как общая философия, разработано так, чтобы не устанавливать произвольные ограничения, и я предполагаю, что это особенно верно для gcc. Даже если существуют произвольные ограничения, вы их не используете, потому что у вас заканчивается системная память.
Случайные ссылки:
пределы препроцессора: http://gcc.gnu.org/onlinedocs/cpp/Implementation-limits.html
некоторые gcc ограничивают сравнительный анализ: ограничения размера модуля gcc
Q2: Какие плохие практики программирования вызывают это?
A2: Например, сброс всего исходного кода в один файл, как вы продемонстрировали. Я бы сказал, что этот вопрос не относится к вашему делу, потому что вы уже заявили, что не можете контролировать сгенерированный код.
Q3: Есть предложения по исправлению исчерпанной виртуальной памяти проблемы cc1plus?
A3: a) добавьте больше оперативной памяти в ваш хост-компьютер (может или не может помочь в зависимости от того, сколько у вас есть, и если ваша ОС является 32 или 64-разрядной); б) увеличить ваше пространство подкачки (то же самое относится); c) если a / b не помогает, обновите свою ОС до 64-битной и попробуйте снова a / b. К сожалению, это 64-битное предложение почти наверняка не относится к версии gcc, поставляемой QNX с 6.4.1. Может быть, даже не до последней.
В качестве общего предложения, поскольку qcc использует gcc, я бы порекомендовал, чтобы у вас была такая же сборка кода с использованием gcc хоста (gcc, который поставляется с вашим Linux). Как только это сработает, вы можете начать искать различия, которые, вероятно, сводятся к 64-битной поддержке.
Других решений пока нет …