在使用gccgo时,有时需要在一个包中包含C文件以提供在使用gc时将实现的功能。但是,如果环境变量CGO_ENABLED=0
存在,tip cmd/go不会构建这些C文件。这导致一些有效的包在使用gccgo时无法构建。
正确的修复方法可能是:如果包具有import "C"
,则在CGO_ENABLED=0
存在时不应构建C文件。但是,如果包没有import "C"
,则应构建C文件。
一个使用此功能的示例包是golang.org/x/sys/unix。使用go工具的gccgo版本(我在这里需要使用gccgo版本,因为https://golang.org/cl/219817尚未移植到主要的go工具):
go test
PASS
ok golang.org/x/sys/unix 0.863s
CGO_ENABLED=0 gccgoenv go test
golang.org/x/sys/unix.test
/home/iant/gopath/src/golang.org/x/sys/unix/gccgo.go:48: error: undefined reference to 'golang.x2eorg..z2fx..z2fsys..z2funix.realSyscallNoError'
/home/iant/gopath/src/golang.org/x/sys/unix/gccgo.go:21: error: undefined reference to 'golang.x2eorg..z2fx..z2fsys..z2funix.realSyscallNoError'
/home/iant/gopath/src/golang.org/x/sys/unix/gccgo.go:28: error: undefined reference to 'golang.x2eorg..z2fx..z2fsys..z2funix.realSyscall'
/home/iant/gopath/src/golang.org/x/sys/unix/gccgo.go:35: error: undefined reference to 'golang.x2eorg..z2fx..z2fsys..z2funix.realSyscall'
/home/iant/gopath/src/golang.org/x/sys/unix/gccgo.go:42: error: undefined reference to 'golang.x2eorg..z2fx..z2fsys..z2funix.realSyscall'
/home/iant/gopath/src/golang.org/x/sys/unix/gccgo.go:53: error: undefined reference to 'golang.x2eorg..z2fx..z2fsys..z2funix.realSyscall'
/home/iant/gopath/src/golang.org/x/sys/unix/gccgo.go:21: error: undefined reference to 'golang.x2eorg..z2fx..z2fsys..z2funix.realSyscallNoError'
/home/iant/gopath/src/golang.org/x/sys/unix/gccgo.go:21: error: undefined reference to 'golang.x2eorg..z2fx..z2fsys..z2funix.realSyscallNoError'
collect2: error: ld returned 1 exit status
FAIL golang.org/x/sys/unix [build failed]
1条答案
按热度按时间9jyewag01#
在调查trickstercache/trickster#498时发现了这个。