我们在移动应用开发中使用了MFP 7.0。在Xcode 9上,我们没有任何问题,我们所有的应用程序都运行平稳。 当Xcode 10和iOS 12发布时,我们升级了MacBook,但在编译过程中遇到了问题。我们已根据论坛的建议添加了库 libstdc ++。6.dylib 。当我们在Simulator上运行时,它运行良好,但是如果尝试在真实设备(iPhone / iPad)中进行测试,则会收到错误消息“ ../ native / Frameworks / libstdc ++。6.dylib,缺少必需的体系结构arm64” “ 。
这是当我针对iPhone设备运行应用程序时在xcode中的实际警告/错误日志:
ld:警告:忽略文件/Users/jm/Documents/App/native/Frameworks/libstdc++.6.dylib,缺少文件/Users/jm/Documents/App/native/Frameworks/libstdc++.6中所需的体系结构arm64 .dylib(2片) 体系结构arm64的未定义符号: “ std :: basic_ostringstream,std :: allocator> :: basic_ostringstream(std :: _ Ios_Openmode)”,引用自: + [NSNumber(UCUtils)doubleToString:]在libWorklightStaticLibProject.a(NSNumber-UCUtils.o)中 “ std :: ostream :: operator <<(double)”,引用自: + [NSNumber(UCUtils)doubleToString:]在libWorklightStaticLibProject.a(NSNumber-UCUtils.o)中 “ std :: string :: c_str()const”,引用自: + [NSNumber(UCUtils)doubleToString:]在libWorklightStaticLibProject.a(NSNumber-UCUtils.o)中 “ std :: basic_string,std :: allocator> ::〜basic_string()”,引用自: + [NSNumber(UCUtils)doubleToString:]在libWorklightStaticLibProject.a(NSNumber-UCUtils.o)中 “ std :: basic_ostringstream,std :: allocator> :: str()const”,引用自: + [NSNumber(UCUtils)doubleToString:]在libWorklightStaticLibProject.a(NSNumber-UCUtils.o)中 “ std :: basic_ostringstream,std :: allocator> ::〜basic_ostringstream()”,引用自: + [NSNumber(UCUtils)doubleToString:]在libWorklightStaticLibProject.a(NSNumber-UCUtils.o)中 ld:找不到体系结构arm64的符号 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
:-1:忽略文件/Users/jm/Documents/App/native/Frameworks/libstdc++.6.dylib,缺少文件/Users/jm/Documents/App/native/Frameworks/libstdc++.6中所需的体系结构arm64 .dylib(2片)
:-1:找不到体系结构arm64的符号
:-1:链接器命令失败,退出代码为1(使用-v查看调用)
答案 0 :(得分:1)
我在MFP v6.2上尝试了以下操作,该功能在设备上运行良好。您可以尝试相同的方法。您可以从复制stdlibc ++库的位置给出问题的更多详细信息。
复制文件:(libstdc ++。6.0.9.tbd)和(libstdc ++。6.tbd) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib 和 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib
将文件:(libstdc ++。6.0.9.tbd)和(libstdc ++。6.tbd)复制到:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib
和
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib
(请注意区分“ iPhoneOS”和“ iPhoneSimulator”)
将复制的库(libstdc ++。6.0.9.tbd)和(libstdc ++。6.tbd)添加到Xcode项目的“构建阶段->链接库”路径。
清理xcode并重建它。
注意:对于/usr/lib/libstdc++.6.dylib: mach-o, but not built for iOS simulator
的模拟器问题,可以尝试将原始文件:libstdc ++。6.0.9.dylib和libstdc ++。6.dylib和libstdc ++。dylib复制到:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib
但是有时甚至无法正常工作,建议在iOS 11模拟器上运行
答案 1 :(得分:0)
您提到“我们已按照论坛的建议添加了libstdc ++。6.dylib库。” ,看来您从以前的Xcode版本复制的库libstdc ++。6.dylib不是为arm64构建的,而是仅为模拟器体系结构而构建的。 最好的方法是在Xcode项目的构建阶段通过在链接库中将libstdc ++库替换为libc ++来摆脱libstdc ++库。这与MobileFirst版本v7.1和v8.0很好地兼容。