Ubuntu 18.04 を使用しています。
CGOを含む以下のプログラムをgolangのプログラムをラズパイ向けにクロスビルドするには
cgo_test.go
package main
import (
"fmt"
)
// #cgo LDFLAGS: -lm
// #include <math.h>
import "C"
func main() {
fmt.Printf("sqrt(3) = %f\n", C.sqrt(C.double(3)))
}
まずクロスコンパイラのインストール
sudo apt install g++-arm-linux-gnueabihf
gccしかいらなくてもあえてg++をインストールすることでクロスのlibcなど必要なものが全て芋づる式にインストールされます。
go build では以下のように環境変数を指定します。
CC=arm-linux-gnueabihf-gcc GOOS=linux GOARCH=arm GOARM=6 CGO_ENABLED=1 go build -o cgo_test.armv6
ポイントはCC=
でCのクロスコンパイラを指定することと、CGO_ENABLED=1
をつけること。
詳しくは
https://golang.org/cmd/cgo/
関連
x86_64のUbuntuでC/C++のソースコードをARM/ARM64用にクロスコンパイルしてQEMUで実行する方法のまとめ
昔はARM用にビルドしたgolangの実行ファイルはqemuでは動かなかったのですが、今はそんなことなくてqemuで動かすことができるようになっています。