メイン プログラムからエクスポートされた関数を呼び出したいdylib内部からを動的にロードするメイン アプリケーションがあります。メインアプリケーションdylibを取得dlopen(NULL,flag)し、. handledlsym(handle, symbol)function
dlopen与えますが、私no errorがしようとすると、次のようになります:dlsymfunctionerror
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");