我一直面对这个挥之不去的问题。当我尝试通过在我的Xcode中选择iOS设备来构建项目时,它会构建代码而不会出现任何错误,但是当我尝试使用iOS模拟器时它会显示以下错误。我在模拟器中构建时有没有办法避免这个库文件?我也尝试了以下链接,但我无法找到确切的解决方案。
提前致谢。
6 duplicate symbols for architecture i386
ld: warning: ignoring file /Users/iOS-MobileTeam/Downloads/iOS/LibraryFiles/libANMobilePaymentLib.a, missing required architecture i386 in file /Users/iOS-MobileTeam/Downloads/iOS/LibraryFiles/libANMobilePaymentLib.a (2 slices)
duplicate symbol _des_set_key in:
/Users/iOS-MobileTeam/Downloads/iOS/LineaSDK/libdtdev.a(des-524F6BE9122BCA82.o)
/Users/iOS-MobileTeam/Downloads/iOS/LineaSDK/libdtdev.a(des-D9CE0CBEE0B3BA81.o)
duplicate symbol _des_encrypt in:
/Users/iOS-MobileTeam/Downloads/iOS/LineaSDK/libdtdev.a(des-524F6BE9122BCA82.o)
/Users/iOS-MobileTeam/Downloads/iOS/LineaSDK/libdtdev.a(des-D9CE0CBEE0B3BA81.o)
duplicate symbol _des_decrypt in:
/Users/iOS-MobileTeam/Downloads/iOS/LineaSDK/libdtdev.a(des-524F6BE9122BCA82.o)
/Users/iOS-MobileTeam/Downloads/iOS/LineaSDK/libdtdev.a(des-D9CE0CBEE0B3BA81.o)
ld: 3 duplicate symbols for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Ignoring file /Users/iOS-MobileTeam/Downloads/iOS/LibraryFiles/libANMobilePaymentLib.a, missing required architecture i386 in file /Users/iOS-MobileTeam/Downloads/iOS/LibraryFiles/libANMobilePaymentLib.a (2 slices)
答案 0 :(得分:2)
静态库已损坏,因为它包含两个包含相同符号(函数)的独立目标文件。
必须重建它,或者如果您没有可以解压缩的源,请删除有问题的文件,然后重新打包(未经测试):
$ mv libdtdev.a libdtdev-old.a
$ mkdir xxx
$ cd xxx
$ ar x ../libdtdev-old.a
$ rm des-D9CE0CBEE0B3BA81.o
$ ar cr ../libdtdev.a *.o
$ cd ..
$ rm -rf xxx
但是,如果静态库包含多个体系结构,那么很多会更复杂。
答案 1 :(得分:0)
问题是您的libANMobilePaymentLib.a静态存档未正确构建。如果这是第三方库,您应该要求作者提供解决此问题的更新版本,并且trojanfoe关于解压缩和重新打包存档的说明没有一个des实现可能是临时解决方法的最佳选择。
如果您自己构建了库或想要将信息传递给作者,则问题是库的i386片包含des_set_key,des_encrypt和des_decrypt符号的副本。我怀疑这是由于在构建libANMobilePaymentLib.a时意外包括des.c两次造成的。另一种可能性是libANMobilePaymentLib.a的作者希望这些函数是静态的而不是导出的。
答案 2 :(得分:-1)
最后我找到了解决上述问题的方法。所有的功劳归于@Khanh
How to ignore some static library for iOS simulator
以上链接帮助我解决了这个问题。
解决问题的步骤: