2014-10-19 5 views
2

Я хочу запустить исполняемый файл .NET, которому требуется более 4 ГБ ОЗУ на OSX 10.9. У меня была установлена ​​Xamarin Studio, но AFAIKT Xamarin не поставляется с 64-битной моно-сборкой, поэтому я решил создать обычную 64-битную монофонию с конфигурацией «с большой-кучей = да» и установить ее в другом месте ,Как настроить моно для использования более 4 ГБ памяти?

git clone https://github.com/mono/mono 
cd mono 
./configure --prefix=<my-local-dir> --enable-nls=no --with-large-heap=yes 
make 
make install 

(я построил 64-битную F # и установлен в моем-местном-каталог, после "Вариант 3" в this page.)

Однако, когда я использую 64-битный моно для запуска исполняемый файл (программа F #, построенная с канонической «fsharpc» в Xamarin), она по-прежнему падает с исключением System.OuOtfMemory. Я попытался это:

export PATH=$PATH:<my-local-dir>/bin 
MONO_GC_PARAMS=max-heap-size=5g <my-local-dir>/bin/mono <my-executable> 

И это дает предупреждение

Warning: In environment variable `MONO_GC_PARAMS': `max-heap-size` must be an integer. 

(это сообщение об ошибке немного вводит в заблуждение, я думаю, что это на самом деле означает 5g слишком велик и не поддерживается, потому что это не жалуйтесь, если я поставлю там «3g»). И программа по-прежнему падает с тем же исключением в момент, когда она превышает память.

Я пропустил что-нибудь важное? Как настроить моно, чтобы иметь размер кучи более 4G?

+0

Собственно, 5g (которое оценивается как число 5,368,709,120). Это не целое число (при условии, что 32-битные длинные целые числа), поскольку оно слишком велико. Забавно, вы попадаете в 32-битный предел TWICE :) –

+0

да, вы определенно правы! На самом деле, 5g, не будучи признанным как «целое число», предполагает, что моно-двоичное я закончил строительство, все еще было 32-битным двоичным кодом. Я только что узнал «новый» трюк, что «mono -V» распечатает архитектуру, где я проверил, что она по-прежнему остается x86 вместо amd64. После исправления проблемной переменной среды проблема решена. – trek42

ответ

1

Вы по-прежнему используете 32-битную версию моно (проверьте свой PATH env var). Это также объясняет разбор 5g для max-heap-size (он будет корректно работать с 64-битным моно). По умолчанию, как и с вашей командой configure выше, нужно установить в/usr/local/bin, поэтому просто запустите свои программы с помощью/usr/local/bin/mono program.exe.

+0

спасибо! да, это именно причина. Я искал «i386» из config.status, и я обнаружил, что мой CC CC определен как «cc -arch i386», в котором объясняется, почему я закончил создание 32-битного моно. После исправления переменных окружения я получил эту работу. – trek42

Смежные вопросы