Go 运行时在哪里寻找插件?
Where does the Go runtime look for plugins?
我想使用 Go plugin facility, and if I call plugin.Open("…")
with an absolute path, this works fine. Still, the original docs 举个例子 plugin.Open("plugin_name.so")
,因此,它也应该使用简单的文件名。
但是,文档没有说明这些插件的搜索路径是什么。是否适用与任何共享库相同的规则? FWIW,将我的插件复制到 /usr/lib
并调用 ldconfig 是不够的。
如果插件路径中未提供绝对路径,则将其视为相对路径,因此始终针对当前工作目录进行解析。所以如果你传递"plugin_name.so"
,它必须在工作目录中。通常它是可执行二进制文件所在的同一个文件夹,除非二进制文件是从另一个文件夹启动的,或者工作目录在那之后发生了变化。
我想使用 Go plugin facility, and if I call plugin.Open("…")
with an absolute path, this works fine. Still, the original docs 举个例子 plugin.Open("plugin_name.so")
,因此,它也应该使用简单的文件名。
但是,文档没有说明这些插件的搜索路径是什么。是否适用与任何共享库相同的规则? FWIW,将我的插件复制到 /usr/lib
并调用 ldconfig 是不够的。
如果插件路径中未提供绝对路径,则将其视为相对路径,因此始终针对当前工作目录进行解析。所以如果你传递"plugin_name.so"
,它必须在工作目录中。通常它是可执行二进制文件所在的同一个文件夹,除非二进制文件是从另一个文件夹启动的,或者工作目录在那之后发生了变化。