Library not found for -lstdc++.6.0.9

一.前言

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

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

image

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

Library not found for -lstdc++.6.0.9_第1张图片
image

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

二.解决方案

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

image

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

Library not found for -lstdc++.6.0.9_第2张图片
image

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

解决方法有两个:

  • 方法一. 我的项目中用到的AmapKitNavi 是很早的2.3.0的版本,高德导航库的最新版本已经迁移到了libc++, 故将其更新到最新版本, 即可解决. (博主的问题是一个.a文件依赖这个库,只能让厂家更新.a库了)
    • 由于高德导航库的前后版本相隔较远, 更新后需要修改部分代码, 为了防止因改动代码而影响原有的逻辑, 我选择了第二种方法.
      但开发者最好还是用第一种方法,直接更新第三方, 临时方案毕竟只能过渡用, 做苹果开发还是要跟着苹果爸爸的屁股后走的.(我也推荐)
  • 方法二. 原博的方法是拷贝Xcode 9中的libstdc++.6.0.9库文件到Xcode 10中,但是直接拷贝有两个问题 :1.麻烦,容易蒙圈 2.Xcode10和Xcode11库文件的路径变了,想要看原博的可以直接点击文首链接,下面我介绍用脚本导入的方法

步骤1: 首先到github下载库文件:https://github.com/devdawei/libstdc-
文件目录如下:

Library not found for -lstdc++.6.0.9_第3张图片
屏幕快照 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.

你可能感兴趣的:(Library not found for -lstdc++.6.0.9)