0

我的 iOS 应用程序可以使用可选的外部 3rd 方库。

我想过使用这个答案(弱链接 - 检查一个类是否存在并使用该类)并在执行特定于该库的代码之前检测该类是否存在。

但是,我发现这个外部库不是写成 Objective-C 类,而是写成 C STRUTS 和函数。

是否有类似的技术可以让我检查 C Strut 或函数是否存在?或者一些更好的选择来查看这个库在运行时是否存在?

4

2 回答 2

1

structs 是编译时工件。它们告诉编译器如何布局内存区域。一旦完成,structs就变得不必要了。与具有元数据的 Objective-C 类不同,它structs没有运行时存在。这就是为什么无法在运行时检测到它们的原因。

dlopen您可以通过调用并传递其路径来检查动态库是否存在:

void *hdl = dlopen(path_to_dl, RTLD_LAZY | RTLD_LOCAL);
if (hdl == NULL) {
    // The library failed to load
    char *err = dlerror(); // Get the error message
} else {
    dlclose(hdl);
}

如果dlopen返回NULL,则无法加载库。您可以致电 获取更多信息dlerror。完成后需要打电话dlclose

于 2014-04-13T11:04:02.267 回答
0

AFAIK 必须存在一个经典的 C 函数。它在链接过程中是静态绑定的,它不像 Objective-C 方法那样在运行时动态绑定。

因此,当代码编译并链接时没有错误或警告,那么你应该没问题。

结构也一样。

于 2014-04-13T10:58:44.417 回答