致命'部分太大,无法编码'内存地址在gcc(iPhone应用程序)

时间:2012-01-06 17:27:17

标签: iphone ios gcc xamarin.ios

我开发了MonoTouch iPhone应用程序。 目前,它通过解析生成所有对象的大量xml数据来工作。 我尝试通过序列化这些对象并存储在sql lite数据库中来提高启动速度。但这实际上比较慢。 我所做的是编写一个程序来预先解析这个xml,然后写出可以简单编译的类文件和在运行时实例化的对象。

这是有效的,并且是一个巨大的速度提升,但是我只能在gcc编译器失败之前编译一些集合:我得到了一个

  

“致命:部分太大,无法编码r_address”

错误,它无法将地址编码为24位分散的重定位条目

有人能为我解释一下吗?我特别不了解编译器,但我很想知道这是否可能,或者我是否做错了。

每个单独的类都会编译,只有当我编译它们中的一些时才会失败 没有特定数量的类导致它失败,也没有函数长度,相反它似乎是由应用程序代码的庞大规模引起的。

谢谢你的时间, 利安

1 个答案:

答案 0 :(得分:1)

这已经是known issue

您可以做的是尝试减少应用程序的最终大小。您可以采取一些措施来减少应用程序的大小:

  • 启用链接(项目属性 - iPhone构建 - 链接器行为:链接所有程序集)

  • 避免使用值类型的泛型,因为它会导致每个值类型发出一次代码(因此,如果您使用List<int>List<long>,则List代码将为两次发射 - 对于更大的通用类型,这可以产生很大的不同)。请注意,所有类类型都将共享代码(因此List<string>List<object>将使用相同的代码),因此请将泛型与类类型一起使用。