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套,一套是模拟器的,一套是设备的,可以简单的用下面的命令
| 1 | 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 来拷贝了,于是这里放出来文件提供下载
将 libstdc++.6.0.9.tbd.zip 解压,放到目录
| 1 | /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/ | 

拷贝过去后,你就可以在新 XCode(黑暗模式真心舒服)下面看到libstdc++了,放心的添加到工程里吧
- 模拟器运行

拷贝libstdc++之后就可以编译通过了,但 App 在模拟器里一运行就崩溃,就会报动态链接库装载出错,看出错提示说是 .dylib 与这个模拟器不符合。这是 XCode10 自带的 iOS12 模拟器的问题,在 XCode10 中安装 iOS11 的模拟器运行环境,然后切换到 iOS11 模拟器运行,一切问题没有。如果想在 XCode12 iOS12 模拟器中运行:
a. 将 libstdc++_sim.zip 解压,放到目录
| 1 | /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/ | 
b. 将 libstdc++.dylib_sim.zip 解压,放到目录
| 1 | /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/ | 
- 真机运行
拷贝 libstdc++ 之后,使用 iOS12 的真机运行,没有啥太大的问题
正确解决办法
- 如果你自己的业务模块使用了 libstdc++,那么就把模块代码重新调整为依赖libc++,然后重新检查是否存在问题,重新编译
- 如果你引用的三方库使用了 libstdc++,那么向三方库寻求支持,进行升级
libc++
Apple 为什么在 Mavericks 里把 C++ 标准库从 libstdc++ 改成 libc++?
其他关于此问题的讨论
libstdc++适配Xcode10与iOS12的更多相关文章
- 更新Xcode10与iOS12 遇到的bug:library not found for -lstdc++.6.0.9
		更新Xcode10与iOS12 遇到的bug:library not found for -lstdc++.6.0.9 解决办法:删除pod里导入的库文件,跑一下pod,再重新导入这些库文件,跑pod ... 
- iOS火焰动画效果、图文混排框架、StackView效果、偏好设置、底部手势等源码
		iOS精选源码 高性能图文混排框架,构架顺滑的iOS应用. 使用OpenGLE覆盖阿尔法通道视频动画播放器视图. 可选最大日期截至当日日期的日期轮选器ChooseDatePicker 简单轻量的图片浏 ... 
- iOS12适配指南
		1.重复文件报错 build Phases-> 删除多余的info.plist 2.library not found for -lstdc++ 苹果在XCode10和iOS12中移除了libs ... 
- iOS适配整理
		iOS12适配问题 1.StatusBar内部结构改变 现象:crash crash log: -[_UIStatusBarIdentifier isEqualToString:]: unrecogn ... 
- iOS----------适配iOS12
		library not found for -lstdc++.6.0.9 原因是苹果在XCode10和iOS12中移除了libstdc++这个库,由libc++这个库取而代之,苹果的解释是libstd ... 
- Xcode10趟坑之路
		https://www.jianshu.com/p/12558d39ba08 先默念别有太多坑啊 跑起来吧 结果没有跑起来 1.第一个坑 Showing Recent Messages :-1: Mu ... 
- 报错:library not found for -lstdc++.6.0.9
		在Xcode 10开发中, 报错:library not found for -lstdc++.6.0.9 解决方案:将Xcode9的libstdc++6.0.9.tbd拷贝到Xcode10中使用 X ... 
- iOS宇宙大战游戏、调试工具、各种动画、AR相册、相机图片编辑等源码
		iOS精选源码 日期时间选择器,swift Space Battle 宇宙大战 SpriteKit游戏源码 LLDebugTool - 便捷的IOS调试工具(新增截屏功能) 相机扫描or长按识别二维码 ... 
- [Swift通天遁地]九、拔剑吧-(10)快速创建美观的聊天界面:可发送文字、表情、图片
		★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ... 
随机推荐
- Unable to preventDefault inside passive event listener due to target being treated as passive
			Unable to preventDefault inside passive event listener due to target being treated as passive 今天在做项目 ... 
- Yarn篇--搭建yarn集群
			一.前述 有了上次hadoop集群的搭建,搭建yarn就简单多了.废话不多说,直接来 二.规划 三.配置如下 yarn-site.xml配置 <property> <n ... 
- 死磕 java集合之HashMap源码分析
			欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 简介 HashMap采用key/value存储结构,每个key对应唯一的value,查询和修改 ... 
- Windows提权与开启远程连接
			1.提权: 建立普通用户:net user 帐户 密码 /add 提权成管理员:net localgroup administrators 帐户 /add 更改用户密码:net user 帐户 密码 ... 
- SignalR学习笔记(五) 横向扩展之SQL Server
			当一个Web应用程序达到一台服务器能力限制,即请求处理数量限制之后,有2种解决方案:纵向扩展和横向扩展. 纵向扩展即用更强的服务器(或虚拟机),或为当前的服务器添加更多的内存,CPU等 横向扩展即添加 ... 
- 用Maven快速生成带有依赖的可执行jar包
			一.背景 最近项目在做微服务的拆分,那么我们想让我们的容器启动更加的轻量级,所以我们选择放弃tomcat等容器,而是通过maven生成带有指定依赖的可执行jar包的方式进行处理,本文我将分享如何通过m ... 
- 什么是SOAP,有哪些应用
			SOAP 是一种轻量级协议,用于在分散型.分布式环境中交换结构化信息. SOAP 利用 XML 技术定义一种可扩展的消息处理框架,它提供了一种可通过多种底层协议进行交换的消息结构. 这种框架的设计思想 ... 
- 【EF6学习笔记】目录
			[EF6学习笔记](一)Code First 方式生成数据库及初始化数据库实际操作 [EF6学习笔记](二)操练 CRUD 增删改查 [EF6学习笔记](三)排序.过滤查询及分页 [EF6学习笔记]( ... 
- SB!SB!SB!
			Topic Link http://ctf5.shiyanbar.com/stega/ste.png SB!SB!SB! 其实很简单,可别真的变成 SB! 1)根据链接提示,直接用stegsolve ... 
- Kali 无法正常上网问题
			有时候我们会突然发现我们的kali不能够正常上网,在终端使用ping 命令对其进行检查,显示网络不可达, 然后使用ifconfig,可以看到没有正在工作的网卡,只有localhost 接着使用ifco ... 
