我正在开发一个具有插件架构的 C 程序。我们构建并打包这两个.rpm
包.deb
。
某些插件具有附加的非二进制资源,例如仅适用于该插件的图像文件或脚本文件。这些附加资源位于与插件文件相同的目录中.so
。因此,插件需要知道它们在磁盘上的位置,并且在同一目录中,才能打开关联的文件。
是否有一个标准的,或者至少是或多或少惯用的方法来做到这一点?
请注意,我对诸如 之类的硬编码路径持谨慎态度/usr/lib/<foo>/plugins
,特别是因为某些发行版喜欢使用/usr/lib64
vs /usr/lib
。
此外,在开发过程中,程序(和/或插件)未安装在标准位置。它们在用户主文件夹中的源代码子目录中执行,并且在这些情况下,插件文件夹与正在开发的二进制文件的相对位置略有不同。
编辑:举个具体的例子,项目的源代码树foo
有一个plugins
目录。一些附带的标准插件foo
都保存在该plugins
目录中。插件之一pyconsole
依赖于foo_pycon.py
,它也在plugins\pyconsole\
目录中。
在开发过程中,我的主目录中可能有多个存储库副本,用于不同分支上的不同工作。一份工作副本可能位于~\src\foo_branch\
.
foo
我调用本地构建的by:实例~\src\foo_branch\release_x86_64\bin\foo
。foo
将所有插件放在相对子目录中,包括~\src\foo_branch\release_x86_64\lib\plugins\pyconsole.so
.
是否有标准或惯用的方法让这个特定实例pyconsole.so
知道它所在的位置,以便它可以打开并使用自己的foo_pycon.py
?
请注意,通过软件包安装时,相对路径可能不同。 as/usr/bin/foo
是安装的二进制文件的位置,我们将插件安装在/usr/lib[64]/foo/plugins
.