Go build windows for linux

How to cross compile from Windows to Linux?

I’ve installed Go 1.2 on a Windows machine, wrote up a dummy program and set the environment variables GOARCH and GOOS to «AMD64» and «linux» respectively. When i issue the » go build » command, i receive an error:

go build runtime: linux/amd64 must be bootstrapped using make.bat 

5 Answers 5

It tells you it needs all tools built before you can use them.

If your windows GOARCH is amd64, then you could «build» all required tools by running this small batch programs:

set GOARCH=amd64 set GOOS=linux go tool dist install -v pkg/runtime go install -v -a std 

If that succeeds then you should be able to do what you’ve described (just use amd64, not AMD64 — it is case sensitive).

If your windows GOARCH is 386, then you would need to build your 386 tools first. You would need to download mingw gcc for that. Do what user2714852 said.

Here https://golang.org/wiki/WindowsCrossCompiling are similar instructions for linux, perhaps you find them helpful.

@lanoxx that command was required in very old version of Go. If you use go1.12, just set GOARCH and GOOS and run ‘go install’ or ‘go build’ command.

Thanks for the clarification. I have go 1.11.4 installed and received an error when I ran that command but in the end it worked without.

I was having some major problems with building for linux from windows, At the end of the day, it was fairly simple. I would comment on Alex’s post, but I can not as I am a stackoverflow newb.

As alex said, set the environment variables. This must be done as administrator (eg right click the «command prompt» or «Powershell» shortcut and click «Run as Administrator»)

set GOARCH=amd64 set GOOS=linux 

If you use Powershell, use

$Env:GOOS = "linux"; $Env:GOARCH = "amd64" 

If you dont do it as administrator, the variables wont take effect and you will just be building it for the OS & Architecture you are on at the moment.

Читайте также:  Вызов терминала kali linux

I found its always good to check your go environment vars by running go env, which gives you the list of current go environment variables

go env set GOARCH=amd64 set GOBIN= set GOEXE= set GOHOSTARCH=amd64 set GOHOSTOS=windows set GOOS=linux set GOPATH=T:\Projects\gopath set GORACE= set GOROOT=C:\Go set GOTOOLDIR=C:\Go\pkg\tool\windows_amd64 set GCCGO=gccgo set CC=gcc set GOGCCFLAGS=-fPIC -m64 -fmessage-length=0 set CXX=g++ set CGO_ENABLED=0 set PKG_CONFIG=pkg-config set CGO_CFLAGS=-g -O2 set CGO_CPPFLAGS= set CGO_CXXFLAGS=-g -O2 set CGO_FFLAGS=-g -O2 set CGO_LDFLAGS=-g -O2 

Make sure the GOOS & GOARCH are set to the values you specified earlier.

If thats all good, you should be able to navigate to the directory containing your go code, and from the command line run:

Which will build the package for the system and the architecure that are set in the environment variables.
I encountered some other issues once I finally figured this out, but that is another matter not related to this issue.

Источник

How to cross-compile Go programs for Windows, macOS, and Linux

How do you build Go binaries that target operating systems and architectures other than your own? This is called cross-compiling, and it’s easy to do with Go.

Programs written in Go can easily be compiled for a wide variety of target operating systems such as Windows, macOS, and Linux by using the GOARCH and GOOS environmental variables. These represent the compilation architecture and the name of the target operating system respectively, and are set to your host compilation architecture ( GOHOSTARCH ) and operating system ( GOHOSTOS ) by default.

You can use the go env command to view the values of these variables on your machine:

$ go env . GOARCH="amd64" GOHOSTARCH="amd64" GOHOSTOS="linux" GOOS="linux" . 

Compile for Windows

Here’s the command you need to run to compile your Go project for a 64-bit Windows machine:

$ GOOS=windows GOARCH=amd64 go build -o bin/app-amd64.exe app.go

In this scenario, GOOS is windows, and GOARCH is amd64 indicating a 64-bit architecture. If you need to support a 32-bit architecture, all you need to do is change GOARCH to 386 .

$ GOOS=windows GOARCH=386 go build -o bin/app-386.exe app.go

Compile for macOS

The GOARCH values for Windows are also valid for macOS, but in this case the required GOOS value is darwin :

# 64-bit $ GOOS=darwin GOARCH=amd64 go build -o bin/app-amd64-darwin app.go  # 32-bit $ GOOS=darwin GOARCH=386 go build -o bin/app-386-darwin app.go

Compile for Linux

To build your Go program for Linux, use linux as the value of GOOS and the appropriate GOARCH value for your target CPU architecture:

# 64-bit $ GOOS=linux GOARCH=amd64 go build -o bin/app-amd64-linux app.go  # 32-bit $ GOOS=linux GOARCH=386 go build -o bin/app-386-linux app.go

Other operating systems and CPU architectures

Go supports a lot more OS and CPU architecture combinations than what I’ve described above, but these are the most used ones. If you need to compile for ARM, Android, Web Assembly, or other targets, please refer to the Go docs to see the combinations of GOOS and GOARCH that are available to you.

Читайте также:  Build install linux package

Thanks for reading, and happy coding!

About the Author

Ayooluwa Isaiah

Ayo is a Software Developer by trade. He enjoys writing about diverse technologies in web development, mainly in Go and JavaScript/TypeScript.
Learn more.

Источник

Kalitsune / GOLAND CROSSPLATFORM COMPILING.md

Cgo is an element of go that allow Go packages to call C code.

But weather you’re using CGO or not is not as easy as «did I called C code?» because while you may didn’t have called C code in you Go program, a package that you’re using probably does.

To figure it out the easiest thing is to try without and if it’s not working try the second option. (But you can also try this if you want to)

if you don’t need CGO, building your go program to another platform is pretty easy as go natively support cross-platform compiling. all you need to do is this:

#Compile your go program to the windows x64 platform env GOOS=windows GOARCH=amd64 go build package-import-path
#Compile your go program to the windows x32 platform env GOOS=windows GOARCH=386 go build package-import-path

Tip: Since go natively support cross compiling, you can easely build your program to other platform as well, further reading here

if you need CGO, building your program will be a little bit more complicated since C doesn’t support native cross-platform compiling.. But don’t wory! It is still pretty easy using the MinGW64 project.

Since we will be using mingw64 to build our project, we’ll need to make sure mingw is installed. If it’s not here’s how you can install it:

sudo apt-get install gcc-mingw-w64
sudo dnf install mingw64-gcc

Now that we met the requirements, we can now build our project

Читайте также:  Установка java linux ubuntu

For windows x64 architecture

To build your program on a windows x64 architecture run:

GOOS=windows GOARCH=amd64 CGO_ENABLED=1 CXX=x86_64-w64-mingw32-g++ CC=x86_64-w64-mingw32-gcc go build package-import-path

For windows x32 architecture

To build your program on a windows x32 architecture run:

GOOS=windows GOARCH=386 CGO_ENABLED=1 CXX=i686-w64-mingw32-g++ CC=i686-w64-mingw32-gcc go build package-import-path

Источник

Оцените статью
Adblock
detector