libstdc++适配Xcode10与iOS12
2018-06-15 15:58
288 查看
编译报错
当你开心得升级完新macOS,以及新XCode,准备体验了一把 Dark Mode 编程模式,开心的打开自己的老项目的时候,发现编译不通过了╮(╯_╰)╭
如果你的工程中如果依赖
libstdc++,无论是你本身的功能用 C++ 跨平台编写,还是你引入了某个SDK其内部依赖这个
libstdc++,都会导致整个工程编译不通过,报出
Undefined symbols,C++ 的 List 找不到了
原因是苹果在XCode10和iOS12中移除了
libstdc++这个库,由
libc++这个库取而代之,苹果的解释是
libstdc++已经标记为废弃有5年了,建议大家使用经过了llvm优化过并且全面支持C++11的
libc++库。
临时解决办法
编译问题拷贝缺失的
libstdc++
XCode10目前是Beta版,和XCode9正式版可以共存,于是从XCode9的目录里,把缺失的.tbd文件拷贝过来,要记得拷贝2套,一套是模拟器的,一套是设备的,可以简单的用下面的命令
1 2 3 | 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/ |
拷贝过去后,你就可以在新XCode(黑暗模式真心舒服)下面看到
libstdc++了,放心的添加到工程里吧
模拟器运行
拷贝
libstdc++之后就可以编译通过了,但App在模拟器里一运行就崩溃,就会报动态链接库装载出错,看出错提示说是.dylib与这个模拟器不符合。奇怪的是同样的工程用XCode9编译运行就一点问题也没有,初步怀疑是XCode10自带的iOS12模拟器的问题,在XCode10中安装iOS11的模拟器运行环境,然后切换到iOS11模拟器运行,一切问题没有。(凑合一下在XCode里调试的时候用iOS11模拟器吧,忍忍)
真机运行
拷贝
libstdc++之后,使用iOS12的真机运行,没有啥太大的问题
正确解决办法
如果你自己的业务模块使用了libstdc++,那么就把模块代码重新调整为依赖
libc++,然后重新检查是否存在问题,重新编译
如果你引用的三方库使用了
libstdc++,那么向三方库寻求支持,进行升级
libc++
Apple 为什么在 Mavericks 里把 C++ 标准库从 libstdc++ 改成 libc++?其他关于此问题的讨论
Xcode10和iOS12踩坑相关文章推荐
- Apple发布适用于iPhone,iPad和iPod Touch的iOS 12 Beta 10和Public Beta 8
- libstdc++适配Xcode10与iOS12
- 10 09 12 足球夜
- iOS 10 以后 Uitableview 与 gestureRecognizer手势冲突
- 基于iOS 10封装的下载器(支持存储读取、断点续传、后台下载、杀死APP重启后的断点续传等功能)
- ios网络学习------10 原生API文件上传
- iOS 解决10网络权限问题
- 16 - 12 - 10 超时(Exceeding Time)问题 优化
- java 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,
- [Creating an image format with an unknown type is an error] on cordova, ios 10
- 关于Xcode8.1 / iOS10+ 真机测试系统打印或者宏定义打印不显示问题
- iOS 10 适配 ATS(app支持https通过App Store审核)
- iOS开发中尝试下超级表单页面和浮动TextFiled的组合,只需要你平时的1/10时间
- 兼容iOS 10 _升级xcode8_适配(四)
- Android模仿iOS iMessages10照片选择器的实现
- IOS 10 适配 系列_0_ iOS10 UserNotifications 框架解析
- User Notifications Framework in iOS 10
- 兼容iOS 10:配置获取隐私数据权限声明
- iOS 多线程篇10—NSOperation基本操作
- ubuntu10/12安装vmtools