LINUX.ORG.RU

[C/C++] Определение расположения файлов ресурсов.


0

0

Есть библиотека и некоторые используемые ею файлы. При сборке и установке данной библиотеки под GNU/linux проблем не возникает, так как каталог установки я указываю ещё на этапе сборки (--prefix), он включается макросом в исходный код и, в следствие этого, библиотеке известно, где будут располагаться ресурсы после установки в систему.

При сборке под ОС Windows с помощью NSIS формируется исполняемый файл-инсталлятор и данный пакет может быть установлен пользователем куда угодно. Как в данном случае в библиотеке определить, где находятся файлы ресурсов?

Пока вижу два пути решения проблемы:

1. Каталог с ресурсами брать из переменной окружения.

2. Искать ресурсы по относительному пути. Но тогда возникает вопрос: как из библиотеки узнать путь к ней?

Есть ли более лучшие/правильные варианты решения данного вопроса?


>2. Искать ресурсы по относительному пути. Но тогда возникает вопрос: как из библиотеки узнать путь к ней?

Всегда так делал - берешь путь к папке с либой, пишешь его+название файла при обращении. Путь узнавать функцией узнанавания пути (код не помню точно).

Zhbert ★★★★★
()
Ответ на: комментарий от lester

> GetModuleFileName

А нету ли какого-нибудь кросплатформенного решения? Уж очень не хочется городить кучу ifdef'ов под разные ОС.

Кстати, а как из библиотеки в GNU/linux узнать путь к ней?

SSN
() автор топика
Ответ на: комментарий от SSN

> Кстати, а как из библиотеки в GNU/linux узнать путь к ней?

Надёжно - никак. Можно парсить /proc/self/maps, но там при некоторых условиях ерунда.

const86 ★★★★★
()
Ответ на: комментарий от SSN

dladdr работает во всех unix-like, поэтому ifdef будет один

Reset ★★★★★
()
Ответ на: комментарий от Reset

он изначально спрашивал про win, ну и как по мне привязываться к расположению библиотеки - это очень странное желание

lester ★★★★
()
Ответ на: комментарий от lester

Желание вполне объяснимое. Например, при построении модульной системы такое может понадобится, чтобы грузить компоненты (.so) из того же места из которого загружено и ядро.

Reset ★★★★★
()
Ответ на: комментарий от Reset

> Желание вполне объяснимое. Например, при построении модульной системы такое может понадобится, чтобы грузить компоненты (.so) из того же места из которого загружено и ядро.

в данном случае речь идет об ресурсах

lester ★★★★
()
Ответ на: комментарий от lester

> он изначально спрашивал про win, ну и как по мне привязываться к расположению библиотеки - это очень странное желание

Да, только в случае windows. Под *nix каталог, в который будет установлено приложение по make install задаётся ещё на этапе сборки. В случае windows приложение пакуется в инсталлятор и при этом совершенно неизвестно, куда оно в дальнейшем будет установлено.

SSN
() автор топика
Ответ на: комментарий от lester

Пока остановился на следующем варианте:

Если задана определённая переменная окружения, то берём путь к ресурсам из неё.

В противном случае:

- под Windows ищем ресурсы по относительному пути (относительно данной библиотеки).

- под *nix используем путь, определённый в config.h

SSN
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.