Как мне получить путь к моему dylib во время выполнения? - PullRequest
8 голосов
/ 28 сентября 2011

На OS X, как код в dylib может найти путь, из которого он был загружен, во время выполнения?

Исходя из фона Windows, я привык звонить GetModuleFileName(dllHandle,...).

Существует NSGetExecutablePath(), который даст мне путь к исполняемому файлу для текущего процесса. Есть ли эквивалент, чтобы дать мне текущий путь к dylib?

1 Ответ

11 голосов
/ 29 сентября 2011

Используйте dladdr (3) .Учитывая адрес памяти, dladdr () выводит структуру, которая, помимо других данных, имеет путь к библиотеке, содержащей адрес.Например, внутри вашей библиотеки:

#include <stdio.h>
#include <dlfcn.h>

void test(void) {
    Dl_info info;
    if (dladdr(test, &info)) {
        printf("Loaded from path = %s\n", info.dli_fname);
    }
}
...