Estou trabalhando em um programa em C que possui uma arquitetura de plug-in. Nós construímos e empacotamos os pacotes .rpm
e .deb
.
Alguns plug-ins possuem recursos não binários adicionais, como arquivos de imagem ou arquivos de script que se aplicam apenas a esse plug-in. Esses recursos adicionais estão no put no mesmo diretório que o arquivo .so
do plugin. Portanto, os plugins precisam saber onde eles estão localizados no disco e, no mesmo diretório, poder abrir seus arquivos associados.
Existe uma maneira padrão, ou pelo menos mais ou menos idiomática, de fazer isso?
Note que sou cauteloso com os caminhos de codificação, como /usr/lib/<foo>/plugins
, especialmente porque algumas distribuições gostam de usar /usr/lib64
vs /usr/lib
.
Além disso, durante o desenvolvimento, o programa (e / ou plugins) não são instalados em locais padrão. Eles são executados fora de um subdiretório de código-fonte na pasta base do usuário, e as pastas do plug-in estão em um local relativo ligeiramente diferente do binário em desenvolvimento nesses casos.
Editar : Para um exemplo concreto, a árvore de origem do projeto foo
tem um diretório plugins
. Alguns plug-ins padrão fornecidos com foo
são mantidos no diretório plugins
. Um dos plugins, pyconsole
, depende de foo_pycon.py
, que também está no diretório plugins\pyconsole\
.
Durante o desenvolvimento, posso ter várias cópias do repositório no meu diretório pessoal, para diferentes trabalhos em diferentes ramos. Uma cópia de trabalho pode estar em ~\src\foo_branch\
.
Eu invoco essa instância construída localmente de foo
por: ~\src\foo_branch\release_x86_64\bin\foo
. foo
localiza todos os plug-ins em um subdiretório relativo, incluindo ~\src\foo_branch\release_x86_64\lib\plugins\pyconsole.so
.
Existe uma maneira padrão ou idiomática para essa instância específica de pyconsole.so
saber onde ela está localizada, para que possa abrir e usar seu próprio foo_pycon.py
?
Note que quando instalado via pacotes, os caminhos relativos são / podem ser diferentes. Onde, como /usr/bin/foo
é a localização do binário instalado, nós instalamos nossos plugins em /usr/lib[64]/foo/plugins
.
Tags shared-library c