你正在使用哪个版本的Go( go version
)?
$ go version
1.19
这个问题在最新版本中是否会重现?
是的。
你正在使用什么操作系统和处理器架构( go env
)?
操作系统:linux
处理器架构:amd64go env
输出
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/user/.cache/go-build"
GOENV="/home/user/.config/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/home/user/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/user/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GOVCS=""
GOVERSION="go1.19"
GCCGO="gccgo"
GOAMD64="v1"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/dev/null"
GOWORK=""
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 -Wl,--no-gc-sections -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build3007501738=/tmp/go-build -gno-record-gcc-switches"
你做了什么?
我按照这个页面上的说明构建了gollvm: https://go.googlesource.com/gollvm
你期望看到什么?
我期望能够成功编译gollvm。
你看到了什么?
我看到了这个错误:
/home/user/workarea/llvm-project/llvm/tools/gollvm/passes/GoStatepoints.cpp:1433:50: error: ‘class llvm::PointerType’ has no member named ‘getElementType’; did you mean ‘getArrayElementType’?
1433 | Type *T = cast(V->getType())->getElementType();
| ^~~~~~~~~~~~~~
| getArrayElementType
4条答案
按热度按时间nukf8bse1#
发现llvm提交的ff040eca93fb5700b30fc81cde9b8f9401c8da67删除了PointerType::getElementType()函数。
3ks5zfa02#
CC @thanm@cherrymui
os8fio9y3#
你好@iMacker2020,是的,这是gollcm目前已知的限制;桥接源代码尚未更新以考虑此更改。另请参阅#51588。
暂时,您可以通过选择较旧版本的LLVM来构建gollvm;我建议使用09629215c272f09e3ebde6cc7eac9625d28910ff。这些提交哈希应该产生一个可用的gollvm版本:
gollvm: 253c122ed62d5e9a32a9806e83c47a389a6435bf
llvm-project: 09629215c272f09e3ebde6cc7eac9625d28910ff
gofrontend: 50707b4b51266166ce9bcf9de187e35760ec50f9
libffi: aa3fce08ba620c50db17215a9f14dd0f1facf741
libbacktrace: 2446c66076480ce07a6bd868badcbceb3eeecc2e
谢谢。
2q5ifsrm4#
你好 @iMacker2020 ,是的,这是gollcm目前已知的限制;桥接源代码尚未更新以考虑这一变化。另请参阅 #51588 。
目前,您可以通过选择较旧版本的LLVM来构建gollvm;我建议使用09629215c272f09e3ebde6cc7eac9625d28910ff。这些提交哈希值应产生一个可用的gollvm版本:
gollvm: 253c122ed62d5e9a32a9806e83c47a389a6435bf llvm-project: 09629215c272f09e3ebde6cc7eac9625d28910ff gofrontend: 50707b4b51266166ce9bcf9de187e35760ec50f9 libffi: aa3fce08ba620c50db17215a9f14dd0f1facf741 libbacktrace: 2446c66076480ce07a6bd868badcbceb3eeecc2e
谢谢。
对于新手,只需添加一条备注:
此版本可以成功与GCC-11.3.0构建,但不能与GCC-6.2.0构建。然而,我没有测试其他GCC版本,其版本在6.2.0和11.3.0之间。因此,请至少确保您的GCC版本比6.2.0更新,否则,您将陷入编译错误(例如,在处理gen-sysinfo.go.tmp时出现llvm-godumpspec段错误)。