iOS で関数を名前で呼び出すことはできませんか? というC関数がありgetstring
ます。私は次のように呼んでいます。
void* handle = dlopen(NULL, RTLD_NOW);
if (handle)
{
fp func = dlsym(handle, "getstring");
if (!func)
responseField.text = [NSString stringWithUTF8String:dlerror()];
else {
char* tmpStr = func();
responseField.text = [NSString stringWithUTF8String:tmpStr];
}
}
else {
responseField.text = [NSString stringWithUTF8String:dlerror()];
}
これが実行されると、responseFiled.text
に設定されdlsym(...): symbol not found
ます。これは、機能するdlopen
が機能しないことを意味しdlsym
ます。バイナリを使用してシンボルをダンプし、存在するnm
ことを確認しました_getstring
。のマニュアルを確認したdlsym
ところ、名前にアンダースコアを追加してはいけないと書かれています。とにかく追加しても問題は解決しません。私は何を間違っていますか?
ここで、Objective-C で関数を名前で呼び出すことについて同様の質問をし、回答に従って Mac で正常に実行したため、この問題は iOS に固有のようです。