遇到一个特别奇怪的事,我的项目什么都没有改变过,我只是把Xcode更新了一下,也尝试了删除Xcode后重新下载,却也一直报错
clang: error: linker command failed with exit code 1 (use -v to see invocation)
错误信息
报错图一、 这一看,大家就明白是YingShiKit的这个包文件,或者 SDK 无法识别路径。所以了就一直查找关于三方及其路径的问题
1. 第一就是如果是新添加的第三方库,且不是静态库
然后找到 Build settings->Linking->Other Linker Flags
将此属性修改成-all_load 或者 -ObjC ,这个视情况而定。总之可以多试几次。
2.可能是这个静态库路径混乱导致的链接错误
Build settings->Search Path->Library Search Paths 删除 或 添加静态库的相应路径。
我找了找YingShiKit,却发现整个项目中,基本就没有这个类,或者相关这个文件夹,所以我删除了这个路径。
二、但是项目还是跑不起来
本身我还以为是真机和模拟器之间的差距问题的,因为项目中有个监控SDK,它只支持真机,但是我还是无论如何测试都还是报错。
后来我又仔细想了想才发现 library not found for -lstdc++.6.0.9的问题,但是一般情况下你只是重装了一下Xcode,这种系统中的库文件,一般怎么可能就没有了啊,我还是怀着疑问搜索了一下,才发现还真的是被置换了。
Xcode升级到Xcode10.0后,由于去掉陈旧的libstdc++库替换为libc++,libc++相对是苹果最新版的C++库,经过优化并全面支持C++11
解决办法:
下载libstdc++库,链接: https://pan.baidu.com/s/1Z2EHEqnQv8EASWZ3hKylAg 提取码: 829d
将 libstdc++、libstdc++.6、libstdc++6.0.9拷贝到Xcode的如下目录:
1.真机环境:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/
2.模拟器环境:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib
总结: 造成问题难度的原因主要是有两个:我这里是有两个错误,第一个应该是之前使用过YingShiKit的三方(我是刚接手到的别人的项目),但是后来没有使用过,但是路径还存在。然后Xcode检查更严格。第二个,Xcode的更新陈旧的库被替换了,而项目中还在使用。
网友评论