2015-02-23 4 views
3

У меня возникли проблемы с попыткой перекрестного компиляции приложения Go на OS X для запуска на linux/amd64. В рассматриваемом приложении используется libvips с помощью этого vips go package. Таким образом, он использует CGO и должен быть скомпилирован с поддержкой CGO.Кросс-компиляция приложения CGO на darwin для linux

Я на Go 1.4 и выполнив следующую команду сборки

GOOS=linux GOARCH=amd64 CGO_ENABLED=1 go build

, но в конечном итоге с ошибкой компоновщика

ld: unknown option: --build-id=none clang: error: linker command failed with exit code 1 (use -v to see invocation)

Я предполагаю, что я, вероятно, нужно добавить что-то вроде аргумента -ldflags, но я не уверен.

Возможно ли выполнить кросс-компиляцию приложений CGO таким образом, или мне нужно сделать встроенную сборку в целевой системе, чтобы избежать проблем и головных болей?

+0

У меня нет OSX, но это выглядит как плохая версия ld или что-то в этом роде. Я бы сказал, что проще просто запустить vm (работает ли qemu на Mac?) И делать компиляцию там. – OneOfOne

+0

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

+0

. Я попытаюсь посмотреть, сможете ли вы получить новую/новую версию clang и ld, но, возможно, кто-то еще будет знать лучше. – OneOfOne

ответ

1

Посмотрите на gonative. это позволяет вам перекрестно компилировать код cgo (пока вы просто используете stdlib).

Другим подходом было бы скомпилировать двоичный файл linux с помощью докера.