Проблема с dlopen (OSX)

У меня есть основное приложение, которое динамически загружает dylib , изнутри этого dylib я бы хотел для вызова экспортированных функций из моей основной программы. Я использую dlopen (NULL, flag) , чтобы получить мои основные приложения handle и dlsym (handle, symbol) , чтобы получить функция .

dlopen не дает ошибки , но когда я пытаюсь выполнить dlsym мою функцию , я получаю следующую ошибку :

dlerror dlsym(RTLD_NEXT, CallMe): symbol not found

Символ экспортируется исправлено, подтверждено нм Я не уверен, почему там RTLD_NEXT ? это результат dlopen (NULL, flag) ?

Как я могу решить эту проблему или достичь своей цели?

Или есть другие способы вызвать основное приложение (желательно не передавая по указателям функций на дилиб)?

Заранее спасибо!

Добавлено:

Экспорт:

extern "C" {
    void CallMe(char* test);    
}
__attribute__((visibility("default")))
void CallMe(char* test)
{
    NSLog(@"CallMe with: %s",test);
}

Результат кода nm

...
0000000000001922 T _CallMe
..

в dylib:

void * m_Handle;
typedef void CallMe(char* test);
CallMe* m_Function;

m_Handle = dlopen(NULL,RTLD_LAZY); //Also tried RTLD_NOW|RTLD_GLOBAL

if(!m_Handle)
    return EC_ERROR;

m_Function = (CallMe*)dlsym(m_Handle, "CallMe");
if(!m_Function)
    return EC_ERROR;

m_Function("Hallo");

5
задан Community 23 May 2017 в 11:59
поделиться