libstdc++适配Xcode10与iOS12

编译报错


当你开心得升级完新 macOS,以及新 XCode,准备体验了一把 Dark Mode 编程模式,开心的打开自己的老项目的时候,发现编译不通过了╮(╯_╰)╭

如果你的工程中如果依赖 libstdc++,无论是你本身的功能用 C++ 跨平台编写,还是你引入了某个 SDK 其内部依赖这个 libstdc++,都会导致整个工程编译不通过,报出 Undefined symbols,C++ 的 List 找不到了

原因是苹果在 XCode10 和 iOS12 中移除了 libstdc++ 这个库,由 libc++ 这个库取而代之,苹果的解释是 libstdc++ 已经标记为废弃有5年了,建议大家使用经过了 llvm 优化过并且全面支持C++11的 libc++ 库。

临时解决办法

拷贝缺失的libstdc++

在 XCode10 正式发布前,XCode10 目前是 Beta 版,和 XCode9 正式版可以共存

于是从 XCode9 的目录里,把缺失的 .tbd 文件拷贝过来,要记得拷贝2套,一套是模拟器的,一套是设备的,可以简单的用下面的命令

cp /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/libstdc++.* /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/

cp /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/libstdc++.* /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/

现在 XCode10 正式发布了,很多人已经没有 XCode9 来拷贝了,于是这里放出来文件提供下载

下载地址

 https://github.com/codesourse/libstdc-

iPhoneOS  放到目录

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/

拷贝libstdc++之后就可以编译通过了,但 App 在模拟器里一运行就崩溃,就会报动态链接库装载出错,看出错提示说是 .dylib 与这个模拟器不符合。这是 XCode10 自带的 iOS12 模拟器的问题,在 XCode10 中安装 iOS11 的模拟器运行环境,然后切换到 iOS11 模拟器运行,一切问题没有。如果想在 XCode12 iOS12 模拟器中运行:

RuntimeRoot 放到目录

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/

iPhoneSimulator 放到目录

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/

:运行模拟器还是会报错

Reason: no suitable image found. Did find: /usr/lib/libstdc++.6.dylib: mach-o, butnotbuiltforiOS simulator

需要 RuntimeRoot 的 libstdc++.6.0.9.dylib  libstdc++.6.dylib 粘贴到 

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • two Last login: Tue Aug 4 17:09:57 on ttys000 yushengyang...
    aofeilin阅读 4,716评论 1 9
  • 首先如果遇到应用卡顿或者因为内存占用过多时一般使用Instruments里的来进行检测。但对于复杂情况可能就需要用...
    攻克乃还_阅读 6,283评论 0 7
  • 今天升级了xcode10 发现以前的老项目全部报错了,慌得一批!!! 赶紧想办法解决: 原来是苹果在XCode10...
    GuessYe阅读 3,674评论 0 2
  • 原文Xcode10和iOS12适配Xcode10和iOS12适配(持续更新)适配iPhoneX全系详解,更新Xco...
    00after阅读 7,772评论 0 6
  • 1info.plist冲突 Xcode10 构建方法做了调整,导致编译报info.plist的错误。 解决方法:f...
    VicoV阅读 6,745评论 0 3

友情链接更多精彩内容