メイン プログラムからエクスポートされた関数を呼び出したい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");