IBM MobileFirst 7.0-libstdc ++。6.dylib上的Xcode 10.1 / iOS 12问题

时间:2018-11-23 03:14:59

标签: ios xcode ibm-mobilefirst

我们在移动应用开发中使用了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查看调用)

2 个答案:

答案 0 :(得分:1)

我在MFP v6.2上尝试了以下操作,该功能在设备上运行良好。您可以尝试相同的方法。您可以从复制stdlibc ++库的位置给出问题的更多详细信息。

  1. 在您的Xcode 9计算机上

复制文件:(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

  1. 在Xcode 10计算机上粘贴到以下路径

将文件:(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”)

  1. 将复制的库(libstdc ++。6.0.9.tbd)和(libstdc ++。6.tbd)添加到Xcode项目的“构建阶段->链接库”路径。

  2. 清理xcode并重建它。

  3. 在iOS 12设备上执行

注意:对于/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很好地兼容。