我有一个主应用程序,动态加载了一个
符号已经通过nm进行了校正确认。我不确定为什么会有
如何解决这个问题或实现我的目标?
还有其他方法可以调用主应用程序(最好不要通过将函数指针传递给dylib)吗?
提前致谢!
补充:
导出:
dylib
,我想从这个dylib
中调用我的主程序导出的函数。我使用dlopen(NULL,flag)
来获取我的主应用程序的handle
,并使用dlsym(handle, symbol)
来获取function
。
dlopen
没有错误,但当我尝试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");
RTLD_NEXT
。你能发布你的实际代码(包括flag
)吗? - Matm_function = (CallMe *)dlsym(RTLD_DEFAULT, "CallMe");
? - trojanfoe