内容简介:第一次接触跨平台编译是在阅读 evio 源码的时候, 发现它的internal包下面的 internal_linux.go 和internal_bsd.go 定义了两个一模一样的函数名 OpenPoll() , golang 在同一个包下是不允许有同名函数的, 后来仔细阅读源码才发现 在 internal_bsd.go 文件的开头有一行注释经过查资料,了解到这个注释是用来做跨平台编译的, 也就是 internal_bsd.go 只会在 darwin netbsd freebsd openbsd drag
第一次接触跨平台编译是在阅读 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
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Xcode 编译疾如风系列(二):并行编译
- 编写 MSBuild 内联编译任务(Task)用于获取当前编译环境下的所有编译目标(Target)
- 使用 Visual Studio 编译时,让错误一开始发生时就停止编译(以便及早排查编译错误节省时间)
- Go编译缓存导致C文件修改后未重新编译
- Android Apk反编译系列教程(一)如何反编译APK
- 漫话:如何给女朋友解释什么是编译与反编译
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First Web Design
Ethan Watrall、Jeff Siarto / O’Reilly Media, Inc. / 2009-01-02 / USD 49.99
Want to know how to make your pages look beautiful, communicate your message effectively, guide visitors through your website with ease, and get everything approved by the accessibility and usability ......一起来看看 《Head First Web Design》 这本书的介绍吧!