iOS-Xcode暂时解决libstdc++问题

1.参考

适配Xcode10与iOS12之libstdc++问题
解决Xcode10 library not found for -lstdc++ 找不到问题
libstdc++适配Xcode10与iOS12(亲测有效)

2.实战

问题描述

手中的项目,在Mac系统升级或Xcode升级后,编译报错,报错信息为

Reason: no suitable image found. Did find:
/usr/lib/libstdc++.6.dylib: mach-o, but not built for iOS simulator

原因是XCode10 和 iOS12 中移除了 libstdc++ 这个库。如果项目依赖libstdc++,或者项目依赖的第三方库有依赖libstdc++。解决办法也很简单

如果是自己的项目有依赖libstdc++

在项目TARGETS-BulidPhases-Link Binary With Libraires中去掉libstdc++,添加上libc++即可

如果是项目依赖的第三方库有依赖libstdc++

需要更新第三方库版本即可。如果第三方的最新版本依旧依赖libstdc++,尽快反馈给第三方库的开发方。

但是还是会有别的原因不能去掉libstdc++

比如第三方库已经很久没有维护了,或者项目中使用的三方库版本比较老,贸贸然更新版本对项目影响比较大,时间又很紧,这里有一个暂时的解决办法。但是最终项目还是要更新依赖库的。

解决方案

在Xcode中添加stdc++.6.0.9文件

文件下载

下载Xcode10中删除的libstdc++库

添加文件

解压下载后的文件,cd到解压文件目录,直接编译install.sh,编译后重启Xcode即可。真机和模拟器均可正常运行

./install.sh

####文件下载
stdc++.6.0.9下载链接:https://pan.baidu.com/s/1s8-DJ1l6jtOTi9-nkiIPmQ 密码: avet
文件下载后解压,并解压模拟器目录和真机目录下的文件

####文件添加
#####模拟器添加
在终端输入
>open /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib

打开Xcode的模拟器目录,将解压后模拟器目录下的libstdc++.6.0.9.tbd文件copy到Xcode的模拟器目录usr/lib下
#####真机添加
~~在终端输入
>open /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib

打开Xcode的真机目录,将解压后真机目录下的libstdc++.6.0.9.tbd文件copy到Xcode的真机目录usr/lib下

重启Xcode,重新运行app即可
####注意
如果Xcode是12以上版本,注意还是不要使用模拟器运行app了,还是使用真机运行吧。我这里虽然这样处理了,模拟器运行还是会报这个错,真机运行还可以。

所以,有时间还是要更新项目中实际使用libstdc++的代码的。第三方库也是要更新的。

推荐阅读更多精彩内容