go 插件: plugin.Open() 静态链接二进制文件时发生段错误,

mwyxok5s  于 2个月前  发布在  Go
关注(0)|答案(4)|浏览(31)

你正在使用的Go版本是(go version)?
go version go1.9 linux/amd64
这个问题在最新的版本中是否会重现?
是的
你正在使用的操作系统和处理器架构是什么(go env)?
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/opt/gopath"
GORACE=""
GOROOT="/opt/go"
GOTOOLDIR="/opt/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build683959130=/tmp/go-build -gno-record-gcc-switches"
CXX="g++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
你做了什么?
使用静态标志编译了插件 docs 中描述的简单插件示例:
go run -ldflags '-extldflags "-static"' main.go
你期望看到什么?
与不使用 -static 标志构建时相同的输出:
go run main.go
Hello, number 7
你看到了什么?
cgo运行时的段错误:runtime fatal error: unexpected signal during runtime execution [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x0]
runtime stack:
runtime.throw(0x52c324, 0x2a)
/opt/go/src/runtime/panic.go:605 +0x95
runtime.sigpanic()
/opt/go/src/runtime/signal_unix.go:351 +0x2b8
goroutine 1 [syscall, locked to thread]:
runtime.cgocall(0x459260, 0xc420053c18, 0xc42000e010)
/opt/go/src/runtime/cgocall.go:132 +0xe4 fp=0xc420053be8 sp=0xc420053ba8 pc=0x401f84
plugin._Cfunc_pluginOpen:(0x25cdfe0, 0xc42000e010, 0x0)
plugin/_obj/_cgo_gotypes.go:98 +0x4e fp=0xc420053c18 sp=0xc420053be8 pc=0x45758e
plugin.open.func3(0x25cdfe0, 0xc42000e010, 0xc42001c0a0)
/tmp/workdir/go/src/plugin/plugin_dlopen.go:102 +0xae fp=0xc420053c58 sp=0xc420053c18 pc=0x4589ae
plugin.open(0x52ce1a, 0x4c, 0x0, 0x0, 0x0)
/tmp/workdir/go/src/plugin/plugin_dlopen.go:102 +0x1d1 fp=0xc420053e88 sp=0xc420053c58 pc=0x457c31
plugin.Open(0x52ce1a, 0x4c, 0xc42007a000, 0xe, 0xc420012000)
/opt/go/src/plugin/plugin.go:31 +0x35 fp=0xc420053ec0 sp=0xc420053e88 pc=0x4570c5
main.loadPlugins()

3duebb1j

3duebb1j1#

我不会指望这个能正常工作。如果有人想找出如何修复它,那太好了,但除此之外,这似乎既困难又低优先级。

4bbkushb

4bbkushb3#

正如伊恩所说,这是一个困难且低优先级的任务。除非有勇敢的人出现并具备实施这一任务的需求和毅力,否则它不会发生。
我想我们可以很容易地产生一个链接时错误,如果-static标志和plugin.Open符号都存在的话。然而,当前的运行时错误似乎很清楚。

yduiuuwa

yduiuuwa4#

如果文档 https://golang.org/pkg/plugin/ 对限制条件有更明确的说明,那就更好了。同时,请参阅本讨论帖中提出的问题:https://www.reddit.com/r/golang/comments/b6h8qq/is_anyone_actually_using_go_plugins/ejkxd2k/

相关问题