Xcode 10 library not found for -lstdc++.6.0.9

Author Avatar
新风作浪 10月 08, 2018
  • 在其它设备中阅读本文章

错误原因:

libstdc++库五年前已经废弃,已经在iOS 12模拟器中删除,也不支持(tvOS和watchOS)平台。苹果建议大家使用经过了 llvm 优化过并且全面支持C++11的 libc++ 库,libc++llvm 项目重新编写的库,简化了代码,速度也有加快。

解决方案:

  1. Target -> Build Phases -> Link Binary With Libraries里把libstdc++.6.0.9.tbd替换成libc++.tbd。然后Xcode 导航菜单栏,File -> Workspace Setting 然后把上面的Build System设置成Legacy Build System,下面的Build System设置为Use Shared Setting(或者上面的Build System默认New Build System (Default),下面Build System设置成Legacy Build System好像都可以)。

  2. 手动将 Xcode 9 中的库 libstdc++.6.0.9.tbd 复制到 Xcode 10 目录下(未验证)

    Xcode 9 路径`/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib`
    
    Xcode 10 路径`/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib`目录下
    
    具体操作:
    真机拷贝tdb库到
    /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/
    
    模拟器拷贝dylib库到
    /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/
    
    模拟器拷贝tdb库到
    /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/
    
    对应库下载地址: https://github.com/Kila2/libstdc-.6.0.9.tbd ,iPhoneOS文件下的库对应真机目录下的库,iPhoneSimulator目录下的库对应模拟器下的库
    

自己业务

如果自己业务中使用libstdc++直接换成libc++

如果使用cocoapods集成的第三方SDK中包含libstdc++,则需要第三方服务升级支持,或者改用手动集成,然后把libstdc++换成libc++

参考:
https://awhisper.github.io/2018/06/08/libstdc-inxcode10ios12
https://github.com/Kila2/libstdc-.6.0.9.tbd