在新的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

另外一种解释方式:

-ObjC

这个flag告诉链接器把库中定义的Objective-C类和Category都加载进来。这样编译之后的app会变大(因为加载了其他的objc代码进来)。但是如果静态库中有类和category的话只有加入这个flag才行。

-all_load

这个flag是专门处理-ObjC的一个bug的。用了-ObjC以 后,如果类库中只有category没有类的时候这些category还是加载不进来。变通方法就是加入-all_load或者-force- load。-all_load会强制链接器把目标文件都加载进来,即使没有objc代码。-force_load在xcode3.2后可用。但是 -force_load后面必须跟一个只想静态库的路径。

编译iOS程序时的-all_load选项,以及-all_load 导致的 ld duplicate symbol xx的问题的更多相关文章

  1. 编译问题: "ld: duplicate symbol _OBJC_METACLASS_$_XXX..."

    在新的SDK环境中调试百度地图的应用程序时,app总是意外退出,找了半天发现错误的原因是unrecognized selector xx的错误,另外还有报了一个Unknown class XXX in ...

  2. 编译android程序时DEX过程出现错误

    今天编译高级设置时出现了错误,这好坑爹啊~ 于是我开始检查代码,发现代码没有错误啊,然后观察MAKE的步骤才发现是DEX时出现了问题!! 下面是错误的LOG: Information:Using ja ...

  3. 编译Console程序时,可以指定Main入口函数

    有如下简单的console程序 using System; namespace HelloWorld { class Program { static void Main(string[] args) ...

  4. 用cmd命令行编译JAVA程序时出现“找不到或无法加载主类”

    今天复习Java基础知识时,使用cmd命令窗口进行编译Java文件发现了如下问题: 网上有很多的解决方法,和问题出现的讨论,以下方法是解决我出现这个问题方式. 解决方式: 重点是圈住的部分. 下面是我 ...

  5. 在开发iOS程序时对日期处理的总结

    小贴士(Tips)-iOS 由于iOS的设备对应多国语言,用户也可以选择不同的日历模式.比如日本的和历,泰国日历等等. 用户也可以自行设定24小时制或者12小时制来显示时间.这些设置会直接影响应用程序 ...

  6. ubuntu安装多个qt版本--不同qt版本编译同一个程序时出现错误--解决方案

    方法: 在ubuntu终端: # make clean   //有Makefile文件的情况 # rm Makefile *.pro.user # qmake  //有多个qt版本,最好指定qmake ...

  7. 不用ide编译java程序时调用jar包

    调用特定目录下的jar包 javac -cp d:\javatest\dom4j.jar Dom4jDemo.java //这部分必须注意,d:\javatest 是Dom4jDemo.class所在 ...

  8. Xcode中编译iOS程序,运行出错:Thread 1: signal SIGABRT

    添加一个全局Exception Breakpoint 就检测出来了  导航栏里面 Debug 菜单里面

  9. delphi怎样在关闭程序时弹出窗口?

    我想在关闭delphi编译的程序时,弹出“您是否确实要退出的窗口”点击否不退出,是退出 在主窗体的CloseQuery事件里,使用messagebox进行提示,根据选择的按钮对Canclose进行设置 ...

随机推荐

  1. ruby -- 基础学习(四)TimeDate处理

     TimeDate格式化输出: DateTime.parse(Time.now.to_s).strftime('%Y-%m-%d %H:%M:%S').to_s #就是按照2013-8-16 16:4 ...

  2. python读取xml文件

    关于python读取xml文章很多,但大多文章都是贴一个xml文件,然后再贴个处理文件的代码.这样并不利于初学者的学习,希望这篇文章可以更通俗易懂的教如何使用python 来读取xml 文件. 什么是 ...

  3. 基于Redis的BloomFilter算法去重

    BloomFilter算法及其适用场景 BloomFilter是利用类似位图或者位集合数据结构来存储数据,利用位数组来简洁的表示一个集合,并且能够快速的判断一个元素是不是已经存在于这个集合.因为基于H ...

  4. Android学习笔记之如何使用圆形菜单实现旋转效果...

    PS:最近忙于项目的开发,一直都没有去写博客,是时候整理整理自己在其中学到的东西了... 学习内容: 1.使用圆形菜单并实现旋转效果..     Android的圆形菜单我也是最近才接触到,由于在界面 ...

  5. IOS开发UI基础UITextView相关属性

    UITextView相关属性 •    text: 设置textView中文本_textView.text = @"Now is the time for all good develope ...

  6. 个人阅读作业Week17

      个人阅读作业Week17 reading buaa software   解决的问题 这是提出问题的博客链接:http://www.cnblogs.com/SivilTaram/p/4830893 ...

  7. listbox里面添加WrapPanel ,支持自适应换行

    listbox大家都会用,如果要让它支持换行操作还必须加上 ListBox.ItemsPanel ItemsPanelTemplate toolkit:WrapPanel/ /ItemsPanelTe ...

  8. jQuery中的动画与特效

    1.显示和隐藏hide()和show() 对于动画来说,显示和隐藏是最基本的效果之一,简单介绍jQuery的显示和隐藏. <script type="text/javascript&q ...

  9. csharp:Chart

    http://www.dotnetperls.com/chart using System; using System.Windows.Forms; using System.Windows.Form ...

  10. KMP--Cyclic Nacklace

    题目网址:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110060#problem/D Description CC always be ...