当前位置: 移动技术网 > IT编程>移动开发>IOS > libstdc++适配Xcode10与iOS12

libstdc++适配Xcode10与iOS12

2018年10月09日  | 移动技术网IT编程  | 我要评论

上海手机报价,薄熙l来,82aaa

编译报错

当你开心得升级完新 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
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 来拷贝了,于是这里放出来文件提供下载

将  解压,放到目录

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. 将  解压,放到目录

1
/applications/xcode.app/contents/developer/platforms/iphonesimulator.platform/developer/sdks/iphonesimulator.sdk/usr/lib/

 

b. 将  解压,放到目录

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踩坑

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

  • ios uicollectionview实现横向滚动

    现在使用卡片效果的app很多,之前公司让实现一种卡片效果,就写了一篇关于实现卡片的文章。文章最后附有demo实现上我选择了使用uicollectionview ... [阅读全文]
  • iOS UICollectionView实现横向滑动

    本文实例为大家分享了ios uicollectionview实现横向滑动的具体代码,供大家参考,具体内容如下uicollectionview的横向滚动,目前我使... [阅读全文]
  • iOS13适配深色模式(Dark Mode)的实现

    iOS13适配深色模式(Dark Mode)的实现

    好像大概也许是一年前, mac os系统发布了深色模式外观, 看着挺刺激, 时至今日用着也还挺爽的终于, 随着iphone11等新手机的发售, ios 13系统... [阅读全文]
  • ios 使用xcode11 新建项目工程的步骤详解

    ios 使用xcode11 新建项目工程的步骤详解

    xcode11新建项目工程,新增了scenedelegate这个类,转而将原appdelegate负责的对ui生命周期的处理担子接了过来。故此可以理解为:ios... [阅读全文]
  • iOS实现转盘效果

    本文实例为大家分享了ios实现转盘效果的具体代码,供大家参考,具体内容如下demo下载地址: ios转盘效果功能:实现了常用的ios转盘效果,轮盘抽奖效果的实现... [阅读全文]
  • iOS开发实现转盘功能

    本文实例为大家分享了ios实现转盘功能的具体代码,供大家参考,具体内容如下今天给同学们讲解一下一个转盘选号的功能,直接上代码直接看viewcontroller#... [阅读全文]
  • iOS实现轮盘动态效果

    本文实例为大家分享了ios实现轮盘动态效果的具体代码,供大家参考,具体内容如下一个常用的绘图,主要用来打分之类的动画,效果如下。主要是ios的绘图和动画,本来想... [阅读全文]
  • iOS实现九宫格连线手势解锁

    本文实例为大家分享了ios实现九宫格连线手势解锁的具体代码,供大家参考,具体内容如下demo下载地址:效果图:核心代码://// clockview.m// 手... [阅读全文]
  • iOS实现卡片堆叠效果

    本文实例为大家分享了ios实现卡片堆叠效果的具体代码,供大家参考,具体内容如下如图,这就是最终效果。去年安卓5.0发布的时候,当我看到安卓全新的material... [阅读全文]
  • iOS利用余弦函数实现卡片浏览工具

    iOS利用余弦函数实现卡片浏览工具

    本文实例为大家分享了ios利用余弦函数实现卡片浏览工具的具体代码,供大家参考,具体内容如下一、实现效果通过拖拽屏幕实现卡片移动,左右两侧的卡片随着拖动变小,中间... [阅读全文]
验证码:
移动技术网