というわけでgolangの勉強を再開したのだが、
package main
import (
"fmt"
)
func main() {
fmt.Println("hello")
fmt.Println("Raspberry Piでも動くかな?Windowsも!")
}
$Env:GOOS = "linux"; $Env:GOARCH = "arm"; $Env:GOARM=6; go build -o hello_rp hello.go
明日からバリバリ書くけど眠いから寝る。とベッドに入って思った。ナチュラルにARMでビルドしたけど、そもそもラズパイってARMじゃん。なんで.net coreでlinux-x86とか言ってんの?!?!で、試した。
using System;
namespace RpTest {
class Program {
static void Main(string[] args) {
Console.WriteLine("Hello .net core 3.1!");
Console.WriteLine("System.Environment.Version : " + System.Environment.Version);
Console.Read();
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration>Release</Configuration>
<Platform>Any CPU</Platform>
<PublishDir>bin\Release\netcoreapp3.1\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RuntimeIdentifier>linux-arm</RuntimeIdentifier>
<SelfContained>true</SelfContained>
<PublishSingleFile>True</PublishSingleFile>
<PublishTrimmed>False</PublishTrimmed>
</PropertyGroup>
</Project>
ARM32がない……?(ちなみに手書きで強制的にarm32に書き換えてもエラー) OS自体に.net coreをインストールする方法は腐るほど出てくるのだけど、クロスコンパイルに関してはARMの情報は探さないとないかー。
言い訳させていただくと、前回の記事にあるようにラズパイ関連のプログラミングエントリを検索すると、ぱいそんだらけだったので「公式以外見るの止めた!」となり、なんか変な誤解というか脳がバグって先のエントリみたいな勘違いをしてしまった模様。酒飲んでないのに。むしろ酔拳効果がないとも言える。(断酒開始から4週経過)
追記
こいつかー
Note: All models of generation 1 and Pi Zero are not supported because the .NET Core JIT depends on armv7 instructions not available on those versions.