Как скомпилировать, когда на машине недостаточно памяти?

Из подробного руководства для ping (8)

   -I interface address
          Set  source address to specified interface address. Argument may
          be numeric IP address or name of device. When pinging IPv6 link-
          local address this option is required.
3
14.05.2017, 15:23
2 ответа

Очевидно, что такая машина не имеет ресурсов и не предназначена для целей разработки.

Для таких задач вы не можете компилировать вслепую в собственной архитектуре вашего (Intel) Debian, которая явно является чуждой архитектурой/бинарными файлами для вашего маленького сервера.

Вам необходимо создать цепочку инструментов кросс-компилятора (кросс) на удаленной машине/в вашем Debian 7, которая компилирует исходные коды, генерирующие двоичные файлы для целевой архитектуры.

Обычно кросс-инструментарий может иметь определенные шаги для установки и может потребовать некоторых настроек для вашей среды.

Кросс-компилятор — это компилятор, способный создавать исполняемый код для платформа, отличная от той, на которой работает компилятор.

Кросс-компилятор необходим для компиляции для нескольких платформ из одна машина. Платформа может оказаться невозможной для запуска компилятора, например, для микроконтроллера встроенной системы, потому что те системы не содержат операционной системы.

В качестве примера,

Как создать кросс-компилятор GCC

В качестве другого примера, я однажды установил кросс-компилятор в Debian для NetBSD/ARM; или, например, если мне нужны двоичные файлы для моего openwrt/32-битного MIPS, я должен получить среду кросс-компиляции, которая соответствует uClib и 32-битному MIPS — мой маршрутизатор на основе MIP имеет только 96 МБ ОЗУ и 128 МБ (или 256 МБ). ?) вспышки.

Говоря об этом, некоторые среды встроенных/малых маршрутизаторов используют uClib вместо glibc для экономии места, поскольку uClib намного меньше, чем glibc.

uClibc — небольшая стандартная библиотека C. предназначен для операционных систем на основе ядра Linux для встраиваемых систем и мобильные устройства.

uClibc в основном написан с нуля, но включает код из glibc и другие проекты.

uClibc — это оболочка системных вызовов ядра Linux и μClinux. uClibc намного меньше, чем glibc, библиотека C обычно используется с дистрибутивами Linux. Хотя glibc предназначен для полного поддерживать все соответствующие стандарты C в широком спектре оборудования и платформы ядра, uClibc специально ориентирован на встроенный Linux. Функции могут быть включены или отключены в соответствии с требованиями к пространству.

Часто у вас также есть busybox, заменяющий и предоставляющий вам чистую версию двоичных утилит, которые есть в Linux, например. вы заметите, например, что ls и find отличаются друг от друга, менее мощны и имеют меньше возможностей для использования.

BusyBox — это программное обеспечение, предоставляющее несколько упрощённых инструментов Unix в один исполняемый файл. Он работает в различных средах POSIX. таких как Linux, Android[7] и FreeBSD[8], хотя многие инструменты он предоставляет, предназначены для работы с интерфейсами, предоставляемыми Linux ядро. Он был специально создан для встраиваемых операционных систем. с очень ограниченными ресурсами.

Различия здесь также не заканчиваются. Вместо Апача у вас могла быть Люси; и вместо OpenSSH Dropbear SSH.

Dropbear — это относительно небольшой SSH-сервер и клиент.Дропбер это особенно полезно для «встроенных» систем Linux (или других Unix), такие как беспроводные маршрутизаторы.

У вас также будет сильно урезанное ядро ​​Linux, причем не обязательно последней версии. В некоторых китайских платах он также может быть несколько «запилен» для поддержки нестандартного оборудования, и вы (и часто производитель) не сможете перекомпилировать его для более новых версий.

Боюсь, вам придется немного больше изучить среду вашей маленькой машины; Я также надеюсь, что этот ответ поможет вам понять, что он не предназначен для работы со встроенным Linux во всех отношениях, как с полноценным сервером Linux.

Как всегда, помимо инструментов, необходимо в них разбираться.

6
27.01.2020, 21:13

Если у вас достаточно места для хранения, вы можете расширить оперативную память путем подкачки.

Для Ubuntu:

  1. sudo fallocate -l 4G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile && sudo nano /etc/fstab
  2. Затем вручную добавьте следующую строку в /etc/fstab:/swapfile none swap sw 0 0
  3. перезагрузка

Скомпилировать без ошибок ОЗУ. Удачи!

0
27.01.2020, 21:13

Теги

Похожие вопросы