2015-11-05 3 views
2

Я создаю приложение третьей стороны через CMake, и я передаю в -DCMAKE_BUILD_TYPE = MinSizeRel для CMake, чтобы попытаться обойти эту проблему, но это не работает.ld: фатальная ошибка: не удалось выделить память

У меня всегда возникает ошибка, когда дело доходит до ссылки.

/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.9.3/../../../../armv7a-hardfloat-linux-gnueabi/bin/ld: fatal error: clientserver: mmap: failed to allocate 791230396 bytes for output file: Cannot allocate memory 

Здание ПК имеет 1 ГБ оперативной памяти и 6 ГБ SWAP. Попытка освободить большую часть физического барана оказывается сложной, так ли есть способ заставить компоновщика использовать SWAP или ограничить то, что он использует?

Я переключился на ld.gold, а просто посмотрел, есть ли у него какие-либо выгоды, но все равно не повезло. К сожалению, добавление большего количества оперативной памяти не является вариантом.

+0

Это не имеет никакого отношения к ОЗУ. У компоновщика заканчивается адресное пространство. Решить проблему можно на базе 64-разрядной машины с 64-разрядным компоновщиком. –

ответ

3

Не идеальное решение, но выкрикивая руководство по эксплуатации для ld и некоторые эксперименты в течение нескольких дней, я обнаружил решение этого.

Я переименовал/usr/bin/ld в /usr/bin/ld.old (который в конечном итоге является символической ссылкой на ld.gold), затем я создал сценарий оболочки, называемый/usr/bin/ld, который просто называется/usr/bin/ld.old и принудительно с помощью нескольких дополнительных параметров.

--no-картографирование всего-файл --no-держать-память --no-держать-преобразованные-файлы

И это решить мою проблему, это не было ничего общего с 32/64-битных а также тот факт, что компоновщик не смог найти достаточно места. Да, варианты выше увеличивают использование ввода-вывода вместо памяти, но факт остается фактом, что он действительно работает.

Я не мог получить

+1

для моего GNU gold 1.11 следующие параметры: '--no-map-whole-files -no-keep-memory -no-keep-files-mapped' – teegaar

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