我有一个主应用程序,它dylib
从内部动态加载一个 ,dylib
我想从我的主程序中调用导出的函数。我dlopen(NULL,flag)
用来检索我的主要应用程序 handle
并dlsym(handle, symbol)
获取function
.
dlopen
给了,no error
但是当我尝试dlsym
我的时候,function
我得到了以下信息error
:
dlerror dlsym(RTLD_NEXT, CallMe): symbol not found
该符号已导出,经nm确认已更正,
我不确定为什么RTLD_NEXT
会出现这种情况?这是结果dlopen(NULL,flag)
吗?
我怎样才能解决这个问题或实现我的目标?
还是有其他方法可以调用主应用程序(最好不是通过将函数指针传递给 dylib)?
提前致谢!
添加:
出口:
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");