我的 iOS 应用程序可以使用可选的外部 3rd 方库。
我想过使用这个答案(弱链接 - 检查一个类是否存在并使用该类)并在执行特定于该库的代码之前检测该类是否存在。
但是,我发现这个外部库不是写成 Objective-C 类,而是写成 C STRUTS 和函数。
是否有类似的技术可以让我检查 C Strut 或函数是否存在?或者一些更好的选择来查看这个库在运行时是否存在?
我的 iOS 应用程序可以使用可选的外部 3rd 方库。
我想过使用这个答案(弱链接 - 检查一个类是否存在并使用该类)并在执行特定于该库的代码之前检测该类是否存在。
但是,我发现这个外部库不是写成 Objective-C 类,而是写成 C STRUTS 和函数。
是否有类似的技术可以让我检查 C Strut 或函数是否存在?或者一些更好的选择来查看这个库在运行时是否存在?
struct
s 是编译时工件。它们告诉编译器如何布局内存区域。一旦完成,struct
s就变得不必要了。与具有元数据的 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);
}
AFAIK 必须存在一个经典的 C 函数。它在链接过程中是静态绑定的,它不像 Objective-C 方法那样在运行时动态绑定。
因此,当代码编译并链接时没有错误或警告,那么你应该没问题。
结构也一样。