我有一个OSX 10.10支持的项目。最近我不得不使用Metal框架进行图像处理。金属框架在10.11中才被引入。因此,由于部署目标是10.10,我的项目将无法编译。我该如何克服呢?我不能添加#ifdef来编译项目,并且只在最新的操作系统版本上使用Metal功能,而不更改部署目标吗?
您可以使用此方法来加载与动态加载的包相关的代码,例如插件或框架。
static NSBundle* _MetalBundle = nil;
static id<MTLDevice> _MetalDevice = nil;
static bool IsMetalSupported(int /*api*/)
{
_MetalBundle = [NSBundle bundleWithPath: @"/System/Library/Frameworks/Metal.framework"];
if (_MetalBundle)
{
[_MetalBundle load];
_MetalDevice = ((MTLCreateSystemDefaultDeviceFunc)::dlsym(dlopen(0, RTLD_LOCAL | RTLD_LAZY), "MTLCreateSystemDefaultDevice"))();
if (_MetalDevice)
return true;
}
[_MetalBundle unload];
return false;
}