Существует ли стандартный / общепринятый способ для библиотеки плагинов идентифицировать свое местоположение на диске?

Я работаю над программой C, которая имеет плагиновую архитектуру. Мы создаем и упаковываем пакеты .rpm и .deb .

Некоторые плагины имеют дополнительные недвоичные ресурсы, такие как файлы изображений или файлы сценариев, которые применяются только к этому плагину. Эти дополнительные ресурсы находятся в том же каталоге, что и файл .so . Таким образом, плагины должны знать, где они расположены на диске, и в том же каталоге, чтобы иметь возможность открывать связанные файлы.

Существует ли стандартный или, по крайней мере, более или менее идиоматический способ сделать это?

Обратите внимание, что я опасаюсь путей hardcoding, таких как /usr/lib/<foo>/plugins , тем более, что некоторые дистрибутивы любят использовать /usr/lib64 vs /usr/lib .

Кроме того, во время разработки программа (и / или плагины) не устанавливается в стандартных местах. Они выполняются из подкаталога исходного кода в домашней папке пользователя, а папки плагинов находятся в несколько другом относительном местоположении из созданного в этих двоичных файлах.

Изменить . Для конкретного примера исходное дерево для проекта foo имеет каталог plugins . Некоторые стандартные плагины, поставляемые с foo , поддерживаются в каталоге plugins . Один из плагинов pyconsole полагается на foo_pycon.py , который также находится в plugins\pyconsole\ .

Во время разработки у меня может быть несколько копий репо в моем домашнем каталоге, для разных работ в разных филиалах. Одна рабочая копия может быть в ~\src\foo_branch\ .

Я вызываю этот локально созданный экземпляр foo : ~\src\foo_branch\release_x86_64\bin\foo . foo находит все плагины в относительном подкаталоге, включая ~\src\foo_branch\release_x86_64\lib\plugins\pyconsole.so .

Есть ли стандартный или идиоматический способ для этого конкретного экземпляра pyconsole.so знать, где он находится, чтобы он мог открыть и использовать свой собственный foo_pycon.py ?

Обратите внимание, что при установке через пакеты относительные пути могут быть разными. Если в качестве /usr/bin/foo находится установленный бинарный файл, мы устанавливаем наши плагины в /usr/lib[64]/foo/plugins .

Linux и Unix - лучшая ОС в мире.