设为首页 加入收藏

TOP

libstdc++适配Xcode10与iOS12
2019-08-31 01:04:23 】 浏览:19
Tags:libstdc 适配 Xcode10 iOS12

编译报错

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

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

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

临时解决办法

  • 编译问题

拷贝缺失的libstdc++

在 XCode10 正式发布前,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/

现在 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++?

其他关于此问题的讨论

Xcode10和iOS12踩坑

?


libstdc++适配Xcode10与iOS12 https://www.cppentry.com/bencandy.php?fid=99&id=233640

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇iOS开发-本地存储(偏好设置,Pli.. 下一篇ios开发GCD(2)-dispatch_semaphor..

kafka-
kafka ? Partit
解决android studio
Kafka史上最详细原理
Error while fetchin
【Kafka】安装与快速
? ? &
flume读取日志数据写
Authentication plug
Flume 自定义source
flume ? 三大核
ICC副本>>>
愚公移山 ?
Hbase架构 ? Hb
5 hbase-shell + &
Hbase ? MapRed
MetaException(messa
Exception in thread
HIVE metastore Dupl
-->