Невозможно выполнить кросс-компиляцию из OSX в Linux - PullRequest
0 голосов
/ 28 июня 2018

Когда я пытаюсь выполнить кросс-компиляцию моего проекта golang из OSX в Linux, я получаю следующее сообщение об ошибке:

# runtime/cgo ld: unknown option: --build-id=none clang: error: linker command failed

и компиляция прерывается.

Вот как я пытаюсь построить приложение:

CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build

Я также пытался использовать gox:

 gox -os="linux"

но все равно не сработало.

Все работает как положено, если я не использую тег GOOS=linux, и я могу успешно построить / запустить свой проект для / на моей машине с OSX.

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Вам нужно установить соответствующий набор инструментов для этого.

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

Пара подходов:

Используйте правильный дистрибутив Linux на виртуальной машине, такой как VirtualBox. Если вы хотите собрать двоичные файлы для Linux / i386 только на Хост MacOSX / x86_64, на мой взгляд, самый простой, безопасный и самое чистое решение. Это не кросс-компилятор, конечно, но это работает, и у него есть дополнительное преимущество, что вы можете проверить свои Исполняемые.

Используй скрипт типа crosstool-NG (потомок оригинала crosstool) для автоматической сборки набора инструментов - определенно проще чем строить его самостоятельно, хотя вам, возможно, придется пойти на компромисс немного более старые версии компилятора.

Кросс-компилятор для Linux на Mac OS X

0 голосов
/ 30 июня 2018

Я могу подтвердить, что команда

$env CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -v main.go

прекрасно работает с файлом "Hello World" main.go в MacOS X High Sierra без установки чего-либо, кроме просто go (см. Также здесь ).

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

...