我尝试使用golang插件并在调用plugin.Open
时始终出现运行时错误。
plugin.Open: plugin was built with a different version of package
我确定该插件是使用相同的代码构建的。现在我对错误信息感到困惑。
这些验证机制如何运作?
答案 0 :(得分:1)
src/runtime/plugin.go
:
for _, pkghash := range md.pkghashes {
if pkghash.linktimehash != *pkghash.runtimehash {
md.bad = true
return "", nil, "plugin was built with a different version of package " + pkghash.modulename
}
}
答案 1 :(得分:0)
为便于将来参考,这些哈希在此处计算:https://golang.org/src/cmd/link/internal/ld/lib.go?h=genhash#L807 似乎它读取了程序包的二进制输出,因此任何可以考虑到该程序包的信息都对二进制代码有影响。