国兵 發表於 2019-11-6 20:37:00

Go 交叉编译

<h2 id="前言">前言</h2>
<p>什么是交叉编译?</p>
<p>交叉编译指在某个平台编译另一平台能使用的文件</p>
<p>本文列出交叉编译的命令, 全程干货, 不多BB</p>
<h2 id="正文">正文</h2>
<p>本文参考官方文档</p>
<pre><code>https://golang.google.cn/doc/install/source#introduction
https://golang.google.cn/doc/install/source#environment
</code></pre>
<p>一条基本的编译命令结构如下(mac/linux)</p>
<pre><code>GOOS=linux GOARCH=amd64 go build main.go
</code></pre>
<p>windows版比较特殊(目的一致,只是win加set)</p>
<pre><code>set GOOS=linux
set GOARCH=amd64
go build main.go
</code></pre>
<p>这个命令有两个参数(main.go不做解释了)</p>
<p>GOOS --&gt; GO,OS 生成文件执行的平台</p>
<p>GOPACH --&gt; GO,PACH 平台的架构</p>
<p>以上这条命令就是生成在amd64架构的linux上的可执行文件</p>
<p>注意的是, 如果你是在同等架构和系统上编译,例如在linux上编译linux的文件,则什么都不用带,go会自己判断</p>
<p>GOOS和GOARCH都有多个选项,可组合,对照如下</p>
<table>
<thead>
<tr>
<th><code>$GOOS</code></th>
<th><code>$GOARCH</code></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>aix</code></td>
<td><code>ppc64</code></td>
</tr>
<tr>
<td><code>android</code></td>
<td><code>386</code></td>
</tr>
<tr>
<td><code>android</code></td>
<td><code>amd64</code></td>
</tr>
<tr>
<td><code>android</code></td>
<td><code>arm</code></td>
</tr>
<tr>
<td><code>android</code></td>
<td><code>arm64</code></td>
</tr>
<tr>
<td><code>darwin</code></td>
<td><code>amd64</code></td>
</tr>
<tr>
<td><code>darwin</code></td>
<td><code>arm64</code></td>
</tr>
<tr>
<td><code>dragonfly</code></td>
<td><code>amd64</code></td>
</tr>
<tr>
<td><code>freebsd</code></td>
<td><code>386</code></td>
</tr>
<tr>
<td><code>freebsd</code></td>
<td><code>amd64</code></td>
</tr>
<tr>
<td><code>freebsd</code></td>
<td><code>arm</code></td>
</tr>
<tr>
<td><code>illumos</code></td>
<td><code>amd64</code></td>
</tr>
<tr>
<td><code>js</code></td>
<td><code>wasm</code></td>
</tr>
<tr>
<td><code>linux</code></td>
<td><code>386</code></td>
</tr>
<tr>
<td><code>linux</code></td>
<td><code>amd64</code></td>
</tr>
<tr>
<td><code>linux</code></td>
<td><code>arm</code></td>
</tr>
<tr>
<td><code>linux</code></td>
<td><code>arm64</code></td>
</tr>
<tr>
<td><code>linux</code></td>
<td><code>ppc64</code></td>
</tr>
<tr>
<td><code>linux</code></td>
<td><code>ppc64le</code></td>
</tr>
<tr>
<td><code>linux</code></td>
<td><code>mips</code></td>
</tr>
<tr>
<td><code>linux</code></td>
<td><code>mipsle</code></td>
</tr>
<tr>
<td><code>linux</code></td>
<td><code>mips64</code></td>
</tr>
<tr>
<td><code>linux</code></td>
<td><code>mips64le</code></td>
</tr>
<tr>
<td><code>linux</code></td>
<td><code>riscv64</code></td>
</tr>
<tr>
<td><code>linux</code></td>
<td><code>s390x</code></td>
</tr>
<tr>
<td><code>netbsd</code></td>
<td><code>386</code></td>
</tr>
<tr>
<td><code>netbsd</code></td>
<td><code>amd64</code></td>
</tr>
<tr>
<td><code>netbsd</code></td>
<td><code>arm</code></td>
</tr>
<tr>
<td><code>openbsd</code></td>
<td><code>386</code></td>
</tr>
<tr>
<td><code>openbsd</code></td>
<td><code>amd64</code></td>
</tr>
<tr>
<td><code>openbsd</code></td>
<td><code>arm</code></td>
</tr>
<tr>
<td><code>openbsd</code></td>
<td><code>arm64</code></td>
</tr>
<tr>
<td><code>plan9</code></td>
<td><code>386</code></td>
</tr>
<tr>
<td><code>plan9</code></td>
<td><code>amd64</code></td>
</tr>
<tr>
<td><code>plan9</code></td>
<td><code>arm</code></td>
</tr>
<tr>
<td><code>solaris</code></td>
<td><code>amd64</code></td>
</tr>
<tr>
<td><code>windows</code></td>
<td><code>386</code></td>
</tr>
<tr>
<td><code>windows</code></td>
<td><code>amd64</code></td>
</tr>
</tbody>
</table>
<p>当然,有些架构编译可能会出现错误,因为对他的支持还不完善,具体请看最上方的官方文档</p><br><br>
来源:https://www.cnblogs.com/chnmig/p/11808483.html
頁: [1]
查看完整版本: Go 交叉编译