你正在使用的Go版本是什么( go version
)?
$ go version
go version go1.15 darwin/amd64
这个问题在最新版本的发布中是否重现?
是的。
你正在使用什么操作系统和处理器架构( go env
)?
go env
输出
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/willie/Library/Caches/go-build"
GOENV="/Users/willie/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/willie/pkg/mod"
GONOPROXY="github.com/vitalsource/*"
GONOSUMDB="github.com/vitalsource/*"
GOOS="darwin"
GOPATH="/Users/willie"
GOPRIVATE="github.com/vitalsource/*"
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/Users/willie/.asdf/installs/golang/1.15/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/Users/willie/.asdf/installs/golang/1.15/go/pkg/tool/darwin_amd64"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/willie/willie/cgotest/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/4z/2t7q40b14znb__08yd_p_znw0000gn/T/go-build009670235=/tmp/go-build -gno-record-gcc-switches -fno-common"
你做了什么?
我构建了一个Go c-archive静态库,用于在多个C/C++程序中使用。使用cgo构建c-archives在Go 1.15及以后的版本中以一种我无法理解的方式中断了。在Go 1.14中构建正常。我在这里放了一个简单的示例: https://github.com/willie/cgotest
你期望看到什么?
我期望能够构建一个没有错误的c-archive静态库。
你看到了什么?
# command-line-arguments
_cgo_export.c:29:3: error: unknown type name 'writeFunc'
4条答案
按热度按时间3b6akqbq1#
这里的问题是
请注意,
writeFunc
既是Go参数名称,也是C类型名称。这导致生成的C代码中出现混淆。72qzrwbm2#
是的!更改Go参数名称解决了问题。如此轻松的解决方法,让人松了一口气。感谢@ianlancetaylor提供的帮助。
ffscu2ro3#
@ianlancetaylor Ian,Go 1.17有什么要做的事情吗?还是应该把它移到Backlog中,直到修复的时间线变得更加明确?
frebpwbc4#
将文本内容移动到待办事项列表中。