你正在使用的Go版本是什么( go version
)?
$ go version
go version go1.21.1 linux/amd64
这个问题在最新版本中是否会重现?
Y
你正在使用什么操作系统和处理器架构( go env
)?
go env
输出
$ go env
GO111MODULE=''
GOARCH='amd64'
GOBIN=''
GOCACHE='/home/mfreeman/.cache/go-build'
GOENV='/home/mfreeman/.config/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOOS='linux'
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/usr/local/go'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/usr/local/go/pkg/tool/linux_amd64'
GOVCS=''
GOVERSION='go1.21.1'
GCCGO='gccgo'
GOAMD64='v1'
AR='ar'
CC='gcc'
CXX='g++'
CGO_ENABLED='1'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build4277136579=/tmp/go-build -gno-record-gcc-switches'
你做了什么?
go build -buildmode=plugin -o ./handler.so ./main.go
然后当我尝试用另一个程序使用它时:
2023/09/29 02:11:29 main.go:26:插件错误:插件是用google.golang.org/protobuf/internal/pragma包的另一个版本构建的。
你期望看到什么?
它应该告诉我不同版本是什么,这样我就可以匹配它。
你看到了什么?
除了一个不太有用的信息告诉我我使用了错误的版本,但没有告诉我正确的版本应该是什么之外,什么都没有。
3条答案
按热度按时间af7jpaap1#
你可以运行
go version -m handler.so
和go version -m <main_executable>
来查找版本以及它们之间的差异。这有帮助吗?kqlmhetl2#
我正在处理一个黑盒情况,我没有访问加载我的共享库的程序,我能看到的只是版本不匹配...。
在2023年9月29日星期五上午10:48,cherrymui ***@***.***>写道:你可以运行go version -m handler.so和go version -m <main_executable>来查找版本以及它们之间的差异。这有帮助吗?——直接回复此电子邮件,查看GitHub上的<#63290 (comment)>,或者取消订阅< https://github.com/notifications/unsubscribe-auth/AAN4Z2TGR36GF4NP2QRNJJTX43UVHANCNFSM6AAAAAA5L2FRQE >。你收到这封邮件是因为你创建了这个线程。消息ID:***@***.***>
jljoyd4f3#
你可以运行
go version -m handler.so
和go version -m <main_executable>
来查找版本以及它们之间的差异。这有帮助吗?恐怕在 there、are 和 some 的情况下,
go version -m
无法提供帮助。plugin/myplugin.go
:main.go
:构建插件:
构建主程序:
它应该告诉我不同的版本是什么,这样我就可以进行匹配。
根本原因可能是其他东西:完整的文件路径、构建标志等,而不是包版本。此外,我不确定我们能否知道不同的版本是什么。我在这里尝试做一些更改:
但我得到的是类似这样的东西: