gpt4 book ai didi

ios - iOS 中使用 dlsym 按名称调用函数

转载 作者:行者123 更新时间:2023-12-01 19:43:59 38 4
gpt4 key购买 nike

在 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(...):未找到符号。这意味着 dlopen 可以工作,但 dlsym 不行。我使用 nm 转储二进制文件中的符号,并看到 _getstring 存在。我检查了manual对于 dlsym ,它说我不应该在名称中添加下划线。无论如何添加它并不能解决问题。我究竟做错了什么?

我问过类似的问题here关于在 Objective-C 中按名称调用函数,然后按照答案在 Mac 上成功尝试,所以这个问题似乎是 iOS 特有的。

最佳答案

我认为问题在于 iOS 上不支持 dlopen,即使您静态链接库也是如此。您应该能够使用

dlsym(RTLD_SELF, "getstring");

因为 RTLD_SELF 表示“开始查找调用 dlsym 的图像”。根据您使用 dlopen() 的方式,它应该完成相同的任务。

关于ios - iOS 中使用 dlsym 按名称调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5040433/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com