У меня есть основное приложение, которое динамически загружает dylib
, изнутри которого dylib
Я хотел бы вызывать экспортированные функции из моей основной программы.Я использую dlopen(NULL,flag)
для получения моих основных приложений handle
и dlsym(handle, symbol)
для получения function
.
dlopen
дает no error
, но когда я пытаюсьdlsym
my function
Я получаю следующее error
:
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);
}
Результат нм
...
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");