在将自定义核心图像过滤器内核迁移到金属阴影语言时,我在构建默认金属库(default.metallib)时遇到了一个错误:
metallib: error: exactly one input file required我当时的印象是,这些文件可以放在单独的.metal文件中。试图将它们合并到一个文件中会导致以下错误:
Metal library creation failed: Error Domain=MTLLibraryErrorDomain Code=3 "Filters module must contain no vertex/fragment/kernel functions but contains 1 kernel function"命名为metal和coreimage可以防止计算内核在默认库中显示为可用函数。
找到这个答案,它建议构建单独的库:
发布于 2019-11-07 08:28:04
现在不能使用默认的金属构建管道将包含核心图像内核的多个.metal文件编译到一个库中。当设置.air标志时,链接器不允许将多个.metallib文件合并到一个-cikernel中。
要么将所有内核放入一个.metal文件,要么使用我在上面链接到的答案中发布的解决方案。
发布于 2020-01-07 16:54:06
您可以创建多个Foo.metal和Bar.metal文件。只是不要把它们作为链接器的目标。
相反,#include "Foo.metal"和#include "Bar.metal"在Main.metal文件中。并且只添加Main.metal文件作为链接器目标。
这样,只有一个.metal文件,它包含所有其他.metal文件。很简单。
因此,Main.metal文件的内容看起来可能非常简单:
#include "Foo.metal"
#include "Bar.metal"https://stackoverflow.com/questions/58738946
复制相似问题