10
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CGOを含むgolangのプログラムをラズパイ向けにクロスビルドする

Last updated at Posted at 2019-10-01

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で動かすことができるようになっています。

10
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?