【发布时间】:2011-02-18 10:56:46
【问题描述】:
我不能在 iOS 中按名称调用函数吗?我有一个名为getstring 的C 函数。我这样称呼它:
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 存在。我检查了manual 的dlsym,它说我不应该在名称中添加下划线。无论如何添加它并不能解决问题。我究竟做错了什么?
我曾问过一个类似的问题here 关于在 Objective-C 中按名称调用函数,然后按照答案在 Mac 上成功尝试,所以这个问题似乎是 iOS 特有的。
【问题讨论】: