Я скомпилировал (довольно большую) модель Simulink для DLL файла (с использованием цели ert_shrdlib) и создал простой фрагмент c++ (в Visual Studio 2012 Express), который загружает библиотеку и выполняет шаги по модели. Когда я пытаюсь скомпилировать решение в исполняемый файл, я получаю следующую ошибку компилятора:
error C1060: compiler is out of heap space c:\matlabr2011b_x86\simulink\include\simstruc.h
Я попытался найти SO так же, как google, о способах борьбы с этим, но я еще не нашел ничего, что сработает. Я попытался установить /Zm к высоким (2000) и низким (256) значениям, я пробовал/кучу с разными значениями, я пытался отключить параллельную компиляцию и использовать платформу решений x64.
Поскольку модель - это то, над чем работала компания в течение длительного времени (и многими людьми), я не думаю, что смогу многое сделать по этому поводу, поэтому я надеюсь, что там будет способ с этим в Visual Studio.
Редактировать:
Да, в моем OP я не правильно настроил 64-битный компилятор, но теперь у меня есть и я все равно получаю ту же ошибку.
Заголовок simstruc.h из Simulink, который содержится в сообщении об ошибке, содержит некоторые действительно большие структуры (~ 400 элементов), и я думаю, что они являются корнем проблемы. Я попытался установить кучу значений ridicuolus (например, 20000000000), но этого все равно недостаточно. Серьезно, хотя, эта рабочая станция имеет 64 ГБ оперативной памяти и должна быть в состоянии скомпилировать этот кровавый заголовок, конечно?!
Нашел проблему.
Это не проблема с кучей, это была пара строк кода в включенном заголовке (из Mathworks), который мой компилятор не смог обработать. Как только я их нашел и прокомментировал, он скомпилирован.
Возможно, ваш компилятор превысил ограничение адресного пространства для 32-разрядных приложений. Сам компилятор, похоже, не имеет 64-битной версии (без любви от Microsoft). 64-битную версию компилятора можно найти в каталоге vc/bin/amd64
. Возможно, вам придется установить PATH
соответственно или просто вызвать cl.exe с полным пуском вручную.
Попробуйте также другой компилятор, такой как ICC или GCC или Clang. Возможно, и другая ОС.