Objective-C检查是否定义了结构

Objective-C检查是否定义了结构,objective-c,c,struct,weak-linking,Objective C,C,Struct,Weak Linking,我的iOS应用程序可以使用可选的外部第三方库 我考虑使用这个答案()并在执行特定于该库的代码之前检测该类是否存在 但是,我发现这个外部库不是作为Objective-C类编写的,而是作为C STRUTS和函数编写的 是否有类似的技术可以让我检查C支柱或功能是否存在?或者其他更好的方法来查看这个库在运行时是否存在?AFAIK经典的C函数必须存在。它在链接过程中是静态绑定的,而不像Objective-C方法那样在运行时是动态绑定的 因此,当代码编译并链接时没有错误或警告,那么您应该很好 结构也是如此

我的iOS应用程序可以使用可选的外部第三方库

我考虑使用这个答案()并在执行特定于该库的代码之前检测该类是否存在

但是,我发现这个外部库不是作为Objective-C类编写的,而是作为C STRUTS和函数编写的


是否有类似的技术可以让我检查C支柱或功能是否存在?或者其他更好的方法来查看这个库在运行时是否存在?

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

因此,当代码编译并链接时没有错误或警告,那么您应该很好


结构也是如此

结构是编译时工件。它们告诉编译器如何布局内存区域。一旦这样做,
struct
s就变得不必要了。与具有元数据的Objective-C类不同,
structs
没有运行时存在。这就是为什么不可能在运行时检测它们

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

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
,则无法加载库。您可以通过拨打电话获取更多信息。完成后您需要打电话。

什么是外部第三方库?他们可能有一些
#define
可以用来检查。我不能说这个库是什么,但你是对的,他们的公共头文件使用了#define,所以我会试试看我的相关问题,因为我给出了更多细节: