参考:
Metal file as part of an iOS framework
Metal default library not found
将.metal转成.h的示例
该答主很6
这个方法是比较推荐的
具体步骤:
- 使用metal工具将每一个.metal文件编译为.air文件
xcrun -sdk macosx metal -c mylibrary.metal -o mylibrary.air- 使用metallib工具将.air或者.metalar文件生成一个.metallib文件
xcrun -sdk macosx metallib mylibrary.air -o mylibrary.metallib
参考:
Functions and Libraries
Creating Libraries During the App Build Process
按照官方步骤:
- 使用metal工具将每一个.metal文件编译为.air文件
xcrun -sdk macosx metal -c mylibrary.metal -o mylibrary.air- 使用metal-ar工具将多个.air文件归档为一个.metalar文件(具体操作类似于UNIX ar工具)
xcrun -sdk macosx metal-ar r mylibrary.metalar mylibrary1.air mylibrary2.air mylibrary3.air- 使用metallib工具将.air或者.metalar文件生成一个.metallib文件
xcrun -sdk macosx metallib mylibrary.air -o mylibrary.metallib
或者
xcrun -sdk macosx metallib mylibrary.metalar -o mylibrary.metallib
小规模测试(将三个.metal生成一个.metallib)成功,但是网上说会存在问题,实际测试中没有发现问题,具体原因目前不明。
参考:
ar command in Linux with examples
Compiling multiple Core Image metal shaders into 1 Metal Library
Compiling multiple .metal files into one .metallib
NSError *libraryError = NULL;
NSString *libraryFile = [[NSBundle mainBundle] pathForResource:@"MyLibrary" ofType:@"metallib"];
id <MTLLibrary> myLibrary = [_device newLibraryWithFile:libraryFile error:&libraryError];
if (!myLibrary) {
NSLog(@"Library error: %@", libraryError);
}
原文:https://www.cnblogs.com/liuxin0430/p/12118411.html