Library-not-found-for--lstdc++-6-0-9

436 阅读3分钟

##一.前言 由于博主在Xcode9升级到Xcode10,Xcode10升级到Xcode11都遇到这个问题,而且弄得老麻烦了,不过现在好了,问题的原因以及最快捷的解决办法已经找到了. 以下博文是博主参考:www.jianshu.com/p/46a1911f9… 所写,在此感谢原博主,但是原博主的百度云失效,并且目录拷贝太麻烦,所以我在修改博主文章的基础上有了此文,并且博主的问题已经解决.

升级Xcode10或者11 后, 项目编译时会报错如下(找不到libstdc++系统库)

图片转存失败,建议将图片保存下来直接上传

原因是: 苹果早在 Xcode 8中 就废弃了libstdc++, 给了开发者两年时间过渡, 如今在Xcode 10中已不再支持. 在Build Phases > Link Binary With Libraries 中已经搜不到libstdc++的库了

图片转存失败,建议将图片保存下来直接上传

Xcode 10 更多特性, 可以参阅这里

二.解决方案

首先要找到具体是哪个库使用了libstdc++.我的项目是用cocoapods管理第三方,可以在Pods/Target Support Files/Pods-xxx.debug.xcconfigPods/Target Support Files/Pods-xxx.release.xcconfig中, 看到cocoapods 的编译选项有libstdc++6.0.9

图片转存失败,建议将图片保存下来直接上传

手动删除两个文件的-l"stdc++.6.0.9"后进行编译, 结果如下:

图片转存失败,建议将图片保存下来直接上传

可以看到, 问题出在AMapNaviKit这个第三方库, 是高德导航库 注意:手动删除 -l"stdc++.6.0.9"之后还要恢复回来

解决方法有两个:

1. 方法一

我的项目中用到的AmapKitNavi 是很早的2.3.0的版本,高德导航库的最新版本已经迁移到了libc++, 故将其更新到最新版本, 即可解决. (博主的问题是一个.a文件依赖这个库,只能让厂家更新.a库了) * 由于高德导航库的前后版本相隔较远, 更新后需要修改部分代码, 为了防止因改动代码而影响原有的逻辑, 我选择了第二种方法. 但开发者最好还是用第一种方法,直接更新第三方, 临时方案毕竟只能过渡用, 做苹果开发还是要跟着苹果爸爸的屁股后走的。

2. 方法二

原博的方法是拷贝Xcode 9中的libstdc++.6.0.9库文件到Xcode 10中,但是直接拷贝有两个问题 :1.麻烦,容易蒙圈 2.Xcode10和Xcode11库文件的路径变了,想要看原博的可以直接点击文首链接,下面我介绍用脚本导入的方法

步骤1: 首先到github下载库文件:github.com/devdawei/li… 文件目录如下:屏幕快照 2019-09-26 下午3.25.35.png 文件夹4是模拟器编译所需文件,文件夹1是模拟器运行所需文件,文件夹2是macAPP开发所需文件,文件夹3是iPhone真机所需文件(详情参考文首原博)

步骤2: 然后打开终端cd到libstdc--master文件夹; 如果你使用的是 Xcode 10,则将install-Xcode_10.sh拖到终端中执行即可。Xcode 11 beta 版或者Xcode11则将install-Xcode_11-beta.sh拖到终端中执行。然后Shift+Command+k Clean项目,再重启Xcode之后就好了 注意: 1.如果你安装了不止一个Xcode,一定要打开你那个.sh文件,把路径中的Xcode.app改成(比如Xcode_11.app)你Xcode的名字. 2.如果你打开两个.sh脚本文件会发现两个脚本文件不同的就是库文件的路径

再次感谢原博主麦兜兜买兜兜以及github的devdawei.