У меня есть основное приложение, которое динамически загружает 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");