Здраствуйте немогу понять почему неработает крос компиляция в golang.
К примеру (рабочая машина с Linux mint, go version 1.5 ): GOOS=linux GOARCH=amd64 go build file.go
получаю бинарник file который успешно запускаеться на рабочей машине либо с полным путем либо ./file
Но когда переношу на debian server (там нету установленого go) и задаю chmod +x (с полным путем или с текущей папки) и пытаюсь выполнить как выше, пишет: -bash: *waytofile*: No such file or directory
Я пробую выставлять значения как для 32 бит так и для 64 - одно и тоже.
Таким же образом пробовал компилировать под win, создавался file.exe но на винде он незапускался, если запускать с командной строки то писалось сообщение чтото вроде: это 16 разрядный файл и неможет запуститься...
В чем проблема и как нормально скомпилировать хотябы для сервака?
Вот, значит зависимости есть. Соответственно на debian нет каких-то из них (а особенно в exe ))
Вам нужно собрать бинарник статическим, чтоб этих зависимостей не было
пробуем
go build --ldflags '-extldflags "-static" -s' file.go
смотрим ldd file , должно быть not a dynamic executable
если, вдрег не помогло, идем в папку с установленным Go, в ней в src запускаем CGO_ENABLED=0 ./make.bash
Сделал go build --ldflags '-extldflags "-static" -s' file.go, ldd file осталось такоеже как было, выполнил команду CGO_ENABLED=0 ./make.bash , пересобралось и еще раз скомпилировал ldd все также показывает старые значения, на серваке попрежнему незапускаеться... Поробую дома скомпилить, дома тоже дебиан может...
ну и go version xgcc (Ubuntu 4.9.1-0ubuntu1) 4.9.1 linux/amd64, а дожно быть go version go1.5 linux/amd64, так что он был не просто не 1.5, а совсем даже не Go ;)
Владимир: и, чтоб не забивать голову, у вас в системе жило 2 компилятор:, перый поставленный через apt-get install, второй "ручками", сборка осуществлялась первым )
Все Спасибо огромное) с меня пиво)
Сделав по мануалу на сайте, даже непересобирая получилось скомпилировать файл, и тут и там работает.
Как я понял мне както убунту предложила поставить gccgo (уже после того как я установил го, но до того как пытался компилить файлы) и соотвественно он все через него и компилил и все не кросс.
Еще раз Спасибо =)