iOS报错:linker command failed with exit code 1 (use -v to see invocation)寻找答案之旅

iOS报错:linker command failed with exit code 1 (use -v to see invocation

错误出现

Android开发程序员,接手了公司的iOS项目,接入了微信登录,本来运行的好好的,后来检查的时候看到微信接入官网说要注意是不是微信的最新版本,不是的话要更新,就使用cocodpod更新了一下,然后就再也编译不了了。。。。在此记录一下,错误如下:

Undefined symbols for architecture arm64:
    "operator delete[](void*)", referenced from:
    +[WeChatApiUtil EncodeBase64:] in libWeChatSDK.a(WeChatApiUtil.o)
    +[WeChatApiUtil NsDataEncodeBase64:] in libWeChatSDK.a(WeChatApiUtil.o)
    +[WeChatApiUtil DecodeWithBase64:] in libWeChatSDK.a(WeChatApiUtil.o)
    +[WeChatApiUtil DecodeBase64:] in libWeChatSDK.a(WeChatApiUtil.o)
    "operator new[](unsigned long)", referenced from:
    +[WeChatApiUtil EncodeBase64:] in libWeChatSDK.a(WeChatApiUtil.o)
    +[WeChatApiUtil NsDataEncodeBase64:] in libWeChatSDK.a(WeChatApiUtil.o)
    +[WeChatApiUtil DecodeWithBase64:] in libWeChatSDK.a(WeChatApiUtil.o)
    +[WeChatApiUtil DecodeBase64:] in libWeChatSDK.a(WeChatApiUtil.o)
    "___gxx_personality_v0", referenced from:
    Dwarf Exception Unwind Info (__eh_frame) in AppDelegate.o
    Dwarf Exception Unwind Info (__eh_frame) in main.o
    ld: symbol(s) not found for architecture arm64
    clang: error: linker command failed with exit code 1 (use -v to see invocation) 

问题分析

linker command failed with exit code 1 (use -v to see invocation) 出现的原因可能较多,根据提示往上查找原因: symbol(s) not found for architecture arm64,即静态库不支持arm64格式。
解决问题步骤:

  1. 检查出问题的静态库是否支持arm64格式,比如例子中的 是微信SDK,进入微信SDK静态库目录,在终端执行命令
    lipo -info 出现的结果包含arm64即是支持,因此不是静态库的原因。

  2. 查看项目配置:
    1).查看项目的构建是否包含arm64
    build setting的Architecture中配置如下:
    在这里插入图片描述
    2)、链接flag
    在这里插入图片描述

  3. 另一种网上的解决方法说是与缓存的库冲突了,删除缓存的库就行,根据错误提示取到缓存的文件夹:
    /Users/XXX/Library/Developer/Xcode/DerivedData 把这个路径下的文件夹都删除了,重新build ,还是不行。。。。
    5.尝试了以上方法都不可以,最后网上查找提示说是链接不到静态库,那重新pop一下总可以了吧,关闭项目,删除原来的微信SDK,重新执行pod install,重新build,抱歉还是不可以。。。

最终解决方案

buid phases下link binary with libraries添加 libc++.tbd,重新执行build。
成功了!!!

参考:
[1]: http://www.111cn.net/sj/ios8/88348.htm
[2]: https://stackoverflow.com/questions/19213782/undefined-symbols-for-architecture-arm64?rq=13
[3]: http://www.cocoachina.com/ios/20170221/18737.html
[4]:https://blog.csdn.net/cheenbee/article/details/65437958 http://adrai.github.io/flowchart.js/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自定义头文件是指用户自己编写的包含函数声明和定义的文件,以便在其他源文件中使用这些函数。在使用自定义头文件时,可能会遇到链接器错误,如"clang: error: linker command failed with exit code 1"。这种错误通常是由于函数的定义未被正确链接导致的。 为了解决这个问题,你可以按照以下步骤进行操作: 1. 确保头文件的声明和定义正确无误。检查头文件中的函数声明和定义是否正确,并确保函数的名称、参数和返回类型与实际使用的地方一致。 2. 在使用头文件的源文件中包含头文件。在使用头文件的源文件中使用`#include`指令将头文件包含进来。例如,如果头文件的名称是`myheader.h`,则可以在源文件中使用以下指令包含头文件: ```c #include "myheader.h" ``` 3. 确保头文件和源文件在同一目录下。如果头文件和源文件不在同一目录下,可以使用相对路径或绝对路径来包含头文件。如果使用相对路径,请确保路径的正确性。 4. 编译时将头文件和源文件一起编译。在编译源文件时,确保将头文件和源文件一起编译。例如,使用以下命令编译源文件`main.c`和头文件`myheader.h`: ```shell gcc main.c myheader.h -o main ``` 如果按照上述步骤操作后仍然出现链接器错误,可能是由于其他原因导致的。你可以尝试使用`-v`选项查看详细的链接器输出,以便更好地理解错误的原因。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值