go - 插件是用不同版本的包加密/内部/无聊构建的
问题描述
我在 golang 中有一个使用构建模式插件的代码。我正在同一个图像(goboring/golang:1.15.8b5)中构建主程序和插件,一个接一个。运行主程序时,一旦尝试加载插件,我就会收到错误消息:
E0319 14:27:38.417362 34123 daemon.go:639] loadVendorPlugins(): fail to load plugin /plugins/my_plugin.so: plugin.Open("/plugins/my_plugin"): plugin was built with a different version of package crypto/internal/boring
如果我将图像更改为 golang:1.15,则不会发生这种情况。知道为什么即使两者都构建在同一个映像中,为什么会发现一个包的不同版本?为什么基础映像可能会对此产生影响?
解决方案
显然,在使用 buildmode=plugin 的时候,看到这个问题并不奇怪。解决方案是将标志添加-trimpath
到 go 构建中,如下所述:https ://github.com/golang/go/issues/27751#issuecomment-593082117
推荐阅读
- qt5 - GCC can't find header, but KDevelop has parsed it. How to solve?
- javascript - Wait for multiple for-each statements to be finished
- python - Using and Overlapped Named Pipe in Python 3.7
- dart - Flutter 中的 Ethereum HD Wallet 实现,Flutter 中有库吗?
- asp.net-core - 使用 Asp.Net 核心为公司活动目录创建 OAuth 服务器?
- javascript - How i display index.js file onto the server in js?
- sql-server - 使用 FME 或其他方法将多个 Excel 文件迁移到 SQL Server
- performance - QOpenGLWindow 和 QOpenGLWidget 在性能上有什么区别?
- wordpress - 如何将自定义元框添加到所见即所得编辑器选项卡
- java - 通过用户输入交换链表中的节点