zoukankan      html  css  js  c++  java
  • 编译问题: "ld: duplicate symbol _OBJC_METACLASS_$_XXX..."

    在新的SDK环境中调试百度地图的应用程序时,app总是意外退出,找了半天发现错误的原因是unrecognized selector xx的错误,另外还有报了一个Unknown class XXX in Interface Builder file的错误,找了一下百度官方的资料,官方建议是app的Build Settings中的Other Linker Flags中增加-all_oad选项,但是我的app中还连接了其他静态库,加了这个选项之后,编译的时候报了 ld duplicate symbol xx的错误,于是又去苹果官网找了一下资料,发现有个类似功能的选项-ObjC,在编译选项中将-all_load改为-ObjC后,app编译和运行正 常,附上apple官方的介绍:

    https://developer.apple.com/library/mac/#qa/qa2006/qa1490.html

    官方的说明是app中链接的静态库中使用了Category(类别),在编译到静态库时,这些代码模块实际上是存在不同的obj文件里的。程序在连 接Category方法时,实际上只加载了Category模块,扩展的基类代码并没有被加载。这样,程序虽然可以编译通过,但是在运行时,因为找不到基 类模块,就会出现unrecognized selector 这样的错误。-all_load就是解决上述问题,类似的还可以用-force_load、-ObjC。 再附上一个相关的资料:

    http://stackoverflow.com/questions/2300867/how-can-i-avoid-duplicate-symbol-errors-in-xcode-with-shared-static-libraries/2300873#2300873

    如果现有的sdk 需要添加flag   "-all_load"  但是添加完以后导致其他库的冲突.  解决方法是删除-all_load  用  _force_load  代替   并在后面加上必须使用-all_laod的库的路径 

    在build settings的linker flags中添加:

    1.  -force_load $(SRCROOT)/xxx/xxxxx.a

  • 相关阅读:
    R语言 主成分分析
    主成分分析(PCA)及其在R里的实现
    UML类图几种关系的总结
    微信Android客户端架构演进之路
    Android单元测试实践
    Android studio 快捷键(Mac)
    Android 启动模式及常用的Intent的Flag
    linux常用命令 (mac ),积少成多
    Android Studio IDE 简单学习和介绍
    轻量级分布式 RPC 框架
  • 原文地址:https://www.cnblogs.com/allencelee/p/7683088.html
Copyright © 2011-2022 走看看