Переносимый способ определения пути к динамической библиотеке, открытой с помощью dlopen - PullRequest
1 голос
/ 06 февраля 2012

Я ищу портативный (POSIX) способ определения пути к библиотеке, открытой с помощью dlopen().Такие функции, как dl_iterate_phdr() и dladdr() не являются переносимыми.

На некоторых man страницах подробно описывается путь, по которому dlopen() находит библиотеки для открытия (ld.so.cache, LD_LIBRARY_PATH, / lib, /usr / lib, ...), поэтому проверка всех этих каталогов может быть возможной, но не переносимой.Например, в Linux мне нужен способ разбора ld.so.cache, но в Mac OS X такой концепции нет.

Пожалуйста, см. предыдущий вопрос , чтобы узнать, почемуЯ хочу сделать это, так как использование dlopen в общем случае не рекомендуется.

Ответы [ 2 ]

3 голосов
/ 06 февраля 2012

На самом деле нет никакого способа сделать то, что вы хотите, мобильно. На самом деле, вероятно, плохая идея использовать dlopen без абсолютного пути, а также плохая идея использовать его для чего-либо, кроме модулей, предназначенных для загрузки с dlopen (созданных и распространяемых либо с вашим собственным проектом, либо библиотека, используемая вашим приложением). Если вы используете его с путем поиска системной библиотеки и библиотеками, «уже присутствующими» в системе, вы рискуете загрузить неправильную версию или даже неправильную библиотеку с тем же именем. Поскольку вы всегда передаете абсолютный путь к dlopen, вы можете быть уверены, что точно знаете, какой файл был загружен (или, что еще лучше, точно знаете, какой файл будет загружен до его загрузки).

Если этот ответ не поможет, возможно, вы могли бы лучше объяснить, чего вы пытаетесь достичь ..

2 голосов
/ 06 февраля 2012

Простой ответ - нет ни одного.Это одно место, где Windows опережает Unix.

...