为了账号安全,请及时绑定邮箱和手机立即绑定

无法打开 Go 插件

无法打开 Go 插件

Go
FFIVE 2022-09-19 17:22:20
我总是收到以下错误:plugin.Open("./plugin"): plugin was built with a different version of package internal/cpu我对这个问题做了一些研究,它清楚地指出,插件是使用不同的上下文版本(golang版本或依赖项)构建的,而不是加载插件的应用程序。我在 Docker 下进行了最小的测试,使用完全相同的 Go 编译器版本和相同的映像来构建插件和应用程序,但我仍然收到相同的错误。如果有人能指出失败的地方,或者我应该检查什么来防止此错误,我将不胜感激。值得一提的是,我正在使用MacOS,但我正在Docker容器下运行测试。实际上,我能够在Docker下为第三方产品构建和运行golang插件。代码如下:// main.gopackage mainimport (    "fmt"    "plugin")func main() {    path := "./plugin.so"    p, err := plugin.Open(path)    if err != nil {        fmt.Printf("unable to load plugin at %s.\n%v", path, err)    }    symbol, err := p.Lookup("Create")    if err != nil {        fmt.Printf("unable to find Create() function in plugin %s.\n%v", path, err)    }    createMethod, ok := symbol.(func()interface{})    if !ok {        fmt.Printf("Create is not a function in plugin %s", path)    }    createMethod()}// plugin.gopackage mainfunc Create() interface{} {    return nil}//DockerfileFROM golang:1.13.5 as pluginBuilderWORKDIR /appCOPY . .RUN go build --buildmode=plugin --trimpath -o /plugin.so plugin.goFROM golang:1.13.5 as serverBuilderWORKDIR /appCOPY . .RUN go build -o /server main.goFROM debian:stable AS serverWORKDIR /appCOPY --from=pluginBuilder /plugin.so .COPY --from=serverBuilder /server .RUN /app/server谢谢
查看完整描述

1 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

您在构建插件时使用该选项,但在构建应用程序时未使用该选项。编辑 docker 文件,以便两个构建都使用(或两者都不使用),然后应用程序将运行(好吧,它在我的机器上确实如此)。-trimpath-trimpath


我对为什么这会导致问题的猜测是“从编译的可执行文件中删除所有文件系统路径”,因此当运行时验证版本时,它会拾取路径中的差异。trimpath


以下是对我有用的dockerfile(复制了原始文件的问题;唯一的更改是添加到第二个):-trimpathgo build


FROM golang:1.13.5 as pluginBuilder


WORKDIR /app


COPY . .


RUN go build --buildmode=plugin --trimpath -o /plugin.so plugin.go


FROM golang:1.13.5 as serverBuilder

WORKDIR /app


COPY . .


RUN go build --trimpath -o /server main.go


FROM debian:stable AS server


WORKDIR /app

COPY --from=pluginBuilder /plugin.so .

COPY --from=serverBuilder /server .


RUN /app/server


查看完整回答
反对 回复 2022-09-19
  • 1 回答
  • 0 关注
  • 358 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号