2015-11-23 5 views
24

Предположим, что я в первую очередь пользователь Linux, но я разрабатываю приложение в Go, которое я хочу быть кросс-платформой. Я искал вокруг, но я не могу найти информацию, чтобы снять следующее:Являются ли Golang бинарники переносимыми?

  1. Если I go install бинарного на моей amd64 системе Ubuntu, он будет также работать на кто-либо 64-битной Ubuntu/Система Debian?
  2. Как я могу использовать go install для создания двоичного файла x86_64, который также будет запущен на основе 32-разрядных Debianlikes?
  3. Если я должен использовать Windows для создания двоичного файла, который будет работать в Windows, как я могу также гарантировать, что даже если моя система Windows будет 64-битной, будет создан исполняемый файл для x86_64?

Мои вопросы по сути сводятся к тому, «как статический/переносной компоновщик или компилятор go?»

+1

Я не уверен, что вы просите , Бинарники переносимы между системами с одинаковой ОС и архитектурой. Go строит двоичный файл для вашего хоста GOOS и GOARCH, если вы не указали иначе. Вы не можете взять 64-битный двоичный файл и запустить его на 32-битной системе. – JimB

+0

Это не был мой опыт создания двоичных файлов, предназначенных для кросс-платформы. – cat

+2

Чтобы ответить на ваш вопрос: «Совсем нет». Просто потому, что это невозможно сделать. Никакой компилятор/компоновщик/загрузчик/toolchain не могут этого сделать. Google кросс-компиляция, которая тривиальна с Go. – Volker

ответ

32
  1. Да, это будет; это относится ко всем двоичным файлам, скомпилированным для 64-разрядного Linux, а не только к написанным в Go (за исключением разделяемых библиотек, на которые Go не полагается)
  2. Перед созданием можно задать переменные окружения : GOOS=windows GOARCH=386 go build (или go install или любой другой), и т.д.
  3. по умолчанию двоичный будет построен для системы вы работаете, но это не обязательно - см 2