Подтвердить что ты не робот

Скоростная кросс-компиляция в единый linux файл

Можно ли скомпилировать быструю двоичную копию с компьютера OS X так, чтобы она выполнялась на сервере под управлением Linux как единый двоичный файл без дополнительных библиотек, которые необходимо динамически связывать?

Я думаю что-то вроде передачи -target в команду swift и передачи другого параметра, чтобы он статически связывал все зависимости, но я не уверен, что представляют собой точные команды.

Точное значение для -target кажется довольно неуловимым.

Нужно ли мне знать точное распределение целей, чтобы передать правильную строку в параметр -target?

4b9b3361

Ответ 1

Из чтения источников на github

  • target будет Linux
  • машиной будет x86_64

Это вызвано первичной build script

Это всегда отвечает на часть вопроса

Точное значение для -target кажется довольно неуловимым.

Установите программную цепочку GCC для Mac OSX, которая может перенастроить Linux, один репо, который я могу увидеть, OSXCross, например.

Поставьте значения переменных среды в GCC перед запуском script, который ссылается на эту привязку.

К сожалению, это не гарантирует, что это сработает, но попробуйте и посмотрите, что произойдет.

Ответ 2

Можно ли скомпилировать быструю двоичную копию с компьютера OS X так, чтобы она выполнялась на сервере под управлением Linux как единый двоичный файл без дополнительных библиотек, которые необходимо динамически связывать?

Короткий ответ? Конечно, это является! Все возможно, когда вы вкладываете в это свое сердце!

Это эффективно? По существу, нет.

Хотя я уверен, что все здесь знакомы с тем, что делает компилятор, ради этого вопроса и его новейших пользователей компилятор - это приложение, которое преобразует считываемый человеком код и отображает его в двоичный формат, который компьютер может понять. Однако стоит упомянуть, что не все компьютеры одинаковы. Каждая компьютерная операционная система имеет другое бинарное сопоставление, чем другое, поэтому простая операция, такая как значения копирования, может быть выражена как 1010 на одной машине, а 0101 - на другой. Как было сказано ранее во многих предыдущих и, например, в этом, многие языки программирования могут быть построены на разных машинах, но очень немногие из них они переносятся через них, потому что каждый компьютер имеет различное двоичное отображение.

~~~~~~~ Итак, как мы это исправим? ~~~~~~~

  • Ну, есть ряд решений, чтобы исправить это. Самый очевидный метод состоит в том, чтобы просто сделать вашу среду целевой средой и создайте свою программу в своем сердце. Вы, очевидно, уже сделали это через виртуальную машину, и это типично то, что многие разработчики будут делать. Это, безусловно, самое простое решение, но оно поражает цель вопроса, который вы хотите просто построить с вашего компьютера OSX.

Раньше вы говорили, что слышали, как люди говорили о компиляции оконных программ на Linux-машинах. Cygwin - это платформа разработки, нацеленная на получение фреймворка Windows, который обычно не присутствует на машинах Linux, и позволяет создавать многие программы с помощью окна. Однако все его выполнение заключается в добавлении двоичных файлов, так что у компилятора есть подходящие места для сопоставления, когда только команды Windows находятся в конфигурации. Все это делает введение двоичных конфигураций, необходимых для успешного переноса программы. Это связано со вторым вариантом.

  • Во-вторых, появляется компилятор, который поддерживает кросс-платформенную компиляцию. Хотя я в настоящее время не проинформирован и/или не знаком с такими компиляторы, это технически обоснованное решение, но я бы назвал его надежны? Возможно нет. Если что-то вы просто добавляете больше ваш компилятор, так как он не только должен правильно отобразить синтаксис одна компьютерная программа для одного компьютера, ей приходится тратить время на соединение это к новым двоичным файлам. Кроме того, вам нужно будет компилятор помнит эти ссылки, которые могут повлечь за собой больше потерь памяти для этого компилятора.

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

  • Третьим и, возможно, самым идеальным решением является изучение технологий контейнеров, таких как docker. Их контейнеры - это, по сути, способы создания вашего приложения и переноса его на новые компьютеры без необходимости изменять или изменять что-либо о том, как вы его создаете и компилируете. Просто создайте его, сохраните в контейнере, поместите его на свой выбор и интегрируйте в свой текущий проект. Подумайте об этом, контейнерные системы, такие как докер, были созданы для предотвращения того, что вы сейчас испытываете, где у вас есть исходный код, работающий на вашей машине, но не место. Что-то вроде docker сможет запустить ваш код на любой машине без необходимости перекомпилировать его для каждой новой машины.

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

Говоря об этом, существует несколько способов исправить проблему, с которой вы столкнулись в настоящее время, так как вы являетесь разработчиком программного обеспечения, и это зависит от вас в том, что было бы идеальным способом обработки вашего проекта.

//EDIT//

Будет отредактировать это, чтобы быть лучшим ответом, если он не потерял свою силу.