美文网首页
golang 跨平台编译

golang 跨平台编译

作者: cc180912 | 来源:发表于2019-05-16 19:34 被阅读0次

第一次接触跨平台编译是在阅读 evio 源码的时候, 发现它的internal包下面的 internal_linux.go 和internal_bsd.go 定义了两个一模一样的函数名 OpenPoll() , golang 在同一个包下是不允许有同名函数的, 后来仔细阅读源码才发现 在 internal_bsd.go 文件的开头有一行注释

// +build darwin netbsd freebsd openbsd dragonfly

经过查资料,了解到这个注释是用来做跨平台编译的, 也就是 internal_bsd.go 只会在 darwin netbsd freebsd openbsd dragonfly 这些系统上参与编译, 这就解释的通了。

下面是从网上转载的golang 跨平台编译的知识

https://www.jianshu.com/p/4b345a9e768e

https://www.cnblogs.com/Spider-spiders/p/10274240.html

evio源码的分析来说明:

我们看到在有些文件的头部有这样一个标识:文件链接:https://github.com/tidwall/evio/blob/master/evio_unix.go

// +build darwin netbsd freebsd openbsd dragonfly linux  它表示的是这个文件只在darwin netbsd openbsd dragonfly linux 平台下编译成功。

而有些文件是这样的标识:文件链接:https://github.com/tidwall/evio/blob/master/evio_other.go

// +build !darwin,!netbsd,!freebsd,!openbsd,!dragonfly,!linux  前面加!表示不支持这个平台的编译

还有一部分文件是没有+build这行注释,由此可知go语言编写的文件,如果想区分不同平台的编译只需在文件的首部加上// +build标识,如果不添加那么默认是支持所有平台的编译。

那么支持的平台到底有哪些呢?参考链接:https://github.com/golang/go/blob/master/src/go/build/syslist.go

// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
 
package build
 
const goosList = "aix android darwin dragonfly freebsd hurd js linux nacl netbsd openbsd plan9 solaris windows zos "
const goarchList = "386 amd64 amd64p32 arm armbe arm64 arm64be ppc64 ppc64le mips mipsle mips64 mips64le mips64p32 mips64p32le ppc riscv riscv64 s390 s390x sparc sparc64 wasm "

当然还有一种方式是指定当前go的环境变量GOOS and GOARCH https://www.jianshu.com/p/4b345a9e768e

相关文章

  • macOS Golang 1.5+ 跨平台编译

    Go (Golang) GOOS and GOARCH 列表 跨平台编译时命令示例

  • Golang 交叉编译

    golang 跨平台(跨操作系统系统)编译 Windows 下编译 Mac 64位可执行程序: Windows 下...

  • golang跨平台编译

    在windows上编译Linux: set CGO_ENABLED=0set GOOS=linuxset GOAR...

  • Golang 跨平台编译

    跨平台编译 默认我们go build的可执行文件都是当前操作系统可执行的文件,如果我想在windows下编译一个l...

  • golang 跨平台编译

    只需要指定目标操作系统的平台和处理器架构即可: 命令行方式 因为不支持CGO,所以要禁用CGO 然后再执行go b...

  • golang 跨平台编译

    第一次接触跨平台编译是在阅读 evio 源码的时候, 发现它的internal包下面的 internal_linu...

  • 【golang】跨平台交叉编译

    Go语言支持交叉编译,在一个平台生成另一个平台的可执行程序 Mac 下编译 Linux 和 Windows 64位...

  • Go语言学习心得

    17年接触golang,虽然早就听说 golang 并发能力强、跨平台无虚拟机、自动GC、快速编译等特点,但实际...

  • 搭建golang跨平台编译环境

    环境配置 安装Docker 安装golang 安装xgo镜像及编译指令 配置环境变量 1. 安装docker 针对...

  • go如何进行交叉编译

    golang交叉编译 问题 golang如何在一个平台编译另外一个平台可以执行的文件。比如在mac上编译Windo...

网友评论

      本文标题:golang 跨平台编译

      本文链接:https://www.haomeiwen.com/subject/zwswaqtx.html