来源:www.liangzl.com/get-article…
duplicate symbol '_OBJC_CLASS_$_YYSYNTH_DUMMY_CLASS_NSData_YYAdd' in:
/Users/gwl/Library/Developer/Xcode/DerivedData/hypnosisArtifact-crsyyabhrfowtnawtohwbaeyaeor/Build/Products/Debug-iphoneos/YYCategories/libYYCategories.a(NSData+YYAdd.o)
/Users/gwl/hypnosis-artifact/hypnosisArtifact/hypnosisArtifact/QuadSDK.framework/QuadSDK(NSData+YYAdd.o)
duplicate symbol '_OBJC_METACLASS_$_YYSYNTH_DUMMY_CLASS_NSData_YYAdd' in:
/Users/gwl/Library/Developer/Xcode/DerivedData/hypnosisArtifact-crsyyabhrfowtnawtohwbaeyaeor/Build/Products/Debug-iphoneos/YYCategories/libYYCategories.a(NSData+YYAdd.o)
/Users/gwl/hypnosis-artifact/hypnosisArtifact/hypnosisArtifact/QuadSDK.framework/QuadSDK(NSData+YYAdd.o)
duplicate symbol '_OBJC_CLASS_$_YYSYNTH_DUMMY_CLASS_UIScreen_YYAdd' in:
/Users/gwl/Library/Developer/Xcode/DerivedData/hypnosisArtifact-crsyyabhrfowtnawtohwbaeyaeor/Build/Products/Debug-iphoneos/YYCategories/libYYCategories.a(UIScreen+YYAdd.o)
/Users/gwl/hypnosis-artifact/hypnosisArtifact/hypnosisArtifact/QuadSDK.framework/QuadSDK(UIScreen+YYAdd.o)
duplicate symbol '_OBJC_METACLASS_$_YYSYNTH_DUMMY_CLASS_UIScreen_YYAdd' in:
/Users/gwl/Library/Developer/Xcode/DerivedData/hypnosisArtifact-crsyyabhrfowtnawtohwbaeyaeor/Build/Products/Debug-iphoneos/YYCategories/libYYCategories.a(UIScreen+YYAdd.o)
/Users/gwl/hypnosis-artifact/hypnosisArtifact/hypnosisArtifact/QuadSDK.framework/QuadSDK(UIScreen+YYAdd.o)
duplicate symbol '_OBJC_CLASS_$_YYSYNTH_DUMMY_CLASS_UIDevice_YYAdd' in:
/Users/gwl/Library/Developer/Xcode/DerivedData/hypnosisArtifact-crsyyabhrfowtnawtohwbaeyaeor/Build/Products/Debug-iphoneos/YYCategories/libYYCategories.a(UIDevice+YYAdd.o)
/Users/gwl/hypnosis-artifact/hypnosisArtifact/hypnosisArtifact/QuadSDK.framework/QuadSDK(UIDevice+YYAdd.o)
duplicate symbol '_OBJC_METACLASS_$_YYSYNTH_DUMMY_CLASS_UIDevice_YYAdd' in:
/Users/gwl/Library/Developer/Xcode/DerivedData/hypnosisArtifact-crsyyabhrfowtnawtohwbaeyaeor/Build/Products/Debug-iphoneos/YYCategories/libYYCategories.a(UIDevice+YYAdd.o)
/Users/gwl/hypnosis-artifact/hypnosisArtifact/hypnosisArtifact/QuadSDK.framework/QuadSDK(UIDevice+YYAdd.o)
duplicate symbol '_OBJC_CLASS_$_YYSYNTH_DUMMY_CLASS_NSNumber_YYAdd' in:
/Users/gwl/Library/Developer/Xcode/DerivedData/hypnosisArtifact-crsyyabhrfowtnawtohwbaeyaeor/Build/Products/Debug-iphoneos/YYCategories/libYYCategories.a(NSNumber+YYAdd.o)
/Users/gwl/hypnosis-artifact/hypnosisArtifact/hypnosisArtifact/QuadSDK.framework/QuadSDK(NSNumber+YYAdd.o)
duplicate symbol '_OBJC_METACLASS_$_YYSYNTH_DUMMY_CLASS_NSNumber_YYAdd' in:
/Users/gwl/Library/Developer/Xcode/DerivedData/hypnosisArtifact-crsyyabhrfowtnawtohwbaeyaeor/Build/Products/Debug-iphoneos/YYCategories/libYYCategories.a(NSNumber+YYAdd.o)
/Users/gwl/hypnosis-artifact/hypnosisArtifact/hypnosisArtifact/QuadSDK.framework/QuadSDK(NSNumber+YYAdd.o)
duplicate symbol '_OBJC_CLASS_$_YYSYNTH_DUMMY_CLASS_NSArray_YYAdd' in:
/Users/gwl/Library/Developer/Xcode/DerivedData/hypnosisArtifact-crsyyabhrfowtnawtohwbaeyaeor/Build/Products/Debug-iphoneos/YYCategories/libYYCategories.a(NSArray+YYAdd.o)
/Users/gwl/hypnosis-artifact/hypnosisArtifact/hypnosisArtifact/QuadSDK.framework/QuadSDK(NSArray+YYAdd.o)
duplicate symbol '_OBJC_METACLASS_$_YYSYNTH_DUMMY_CLASS_NSArray_YYAdd' in:
/Users/gwl/Library/Developer/Xcode/DerivedData/hypnosisArtifact-crsyyabhrfowtnawtohwbaeyaeor/Build/Products/Debug-iphoneos/YYCategories/libYYCategories.a(NSArray+YYAdd.o)
/Users/gwl/hypnosis-artifact/hypnosisArtifact/hypnosisArtifact/QuadSDK.framework/QuadSDK(NSArray+YYAdd.o)
duplicate symbol '_OBJC_CLASS_$_YYSYNTH_DUMMY_CLASS_NSString_YYAdd' in:
/Users/gwl/Library/Developer/Xcode/DerivedData/hypnosisArtifact-crsyyabhrfowtnawtohwbaeyaeor/Build/Products/Debug-iphoneos/YYCategories/libYYCategories.a(NSString+YYAdd.o)
/Users/gwl/hypnosis-artifact/hypnosisArtifact/hypnosisArtifact/QuadSDK.framework/QuadSDK(NSString+YYAdd.o)
duplicate symbol '_OBJC_METACLASS_$_YYSYNTH_DUMMY_CLASS_NSString_YYAdd' in:
/Users/gwl/Library/Developer/Xcode/DerivedData/hypnosisArtifact-crsyyabhrfowtnawtohwbaeyaeor/Build/Products/Debug-iphoneos/YYCategories/libYYCategories.a(NSString+YYAdd.o)
/Users/gwl/hypnosis-artifact/hypnosisArtifact/hypnosisArtifact/QuadSDK.framework/QuadSDK(NSString+YYAdd.o)
ld: 12 duplicate symbols for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
1.新建一个文件夹lib, 将QuadSDK.framework复制到lib文件夹内,QuadSDK.framework内容如图, QuadSDK就是我们要拆分的文件
2.打开终端, cd到QuadSDK.framework下, 执行
cd /Users/gwl/lib/QuadSDK.framework
2.查看包信息,如果提示fat file,那么代表这个包是支持多平台的,例如armv7,armv7s,i386等,需要我们逐一做解包重打包操作。否则我们只需要做相对应cpu架构解包重打包
lipo -info QuadSDK
3.从QuadSDK中拆分出arm64架构对应的.a库并命名为QuadSDK_arm64.a
lipo QuadSDK -thin arm64 -output QuadSDK_arm64.a
4.然后同样的方法修改架构名拆分出其他3种cpu架构对应的.a库, 拆分完如下图
lipo QuadSDK -thin armv7 -output QuadSDK_armv7.a
lipo QuadSDK -thin x86_64 -output QuadSDK_x86_64.a
拆分完如下图
5.将各个.a库拆分.o文件,每个架构的.a库都放到一个独立对应的.a文件夹中。在QuadSDK.framework根目录新建文件夹名为arm64, 将QuadSDK_arm64.a拖进该文件夹, 然后cd到arm64文件夹
执行如下命令
ar -x QuadSDK_arm64.a
QuadSDK_arm64.a就被拆分成很多的.o文件,在里面找到造成冲突的.o文件删除掉。
6.把拆分后的文件重新生成.framework静态库. 在arm64文件夹里执行如下命令
libtool -static -o ../QuadSDK_arm64.a *.o
合并后的 QuadSDK_arm64.a
7.把其他几个cpu架构的.a库重复第5、6步进行拆分合并
8.将所有cpu架构的.a库进行合并,把QuadSDK文件删除掉, 执行如下命令
cd /Users/gwl/lib/QuadSDK.framework
lipo -create -output QuadSDK QuadSDK_arm64.a QuadSDK_armv7.a QuadSDK_x86_64.a
9.最后恢复到开始时的结构,把多余的文件都删掉,把新的QuadSDK.framework放到项目中,再次运行