xcode中的.a 静态库64位的问题
我在编译支持 64位的app 时,有些静态库必须是 支持64位的才能编译通过,有些直接用32位就能通过。
我现在迷惑的是,静态库在哪些地方需要区别对待 32位 64位 ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我在编译支持 64位的app 时,有些静态库必须是 支持64位的才能编译通过,有些直接用32位就能通过。
我现在迷惑的是,静态库在哪些地方需要区别对待 32位 64位 ?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(1)
参考:http://blog.csdn.net/keyboardota/article/details/11993883
32位的iOS系统和64位的iOS系统主要的差别有两个,一个是数据类型的差别,一个是过程调用方法的差别。
不要将长整型数据(long)赋予整型(int)
这种代码在32位系统上没有问题,因为在32位系统中long和int的长度是一样的,不过在64位系统中就有可能出问题,因为64位系统中long比int长,将long值赋予int将导致数据丢失。
不要将指针类型(Pointer)赋予整型(int)
为了方便地址计算,有时程序员会将指针类型赋予整型,这种代码在32位系统上没有问题,因为在32位系统中Pointer和int的长度是一样的,不过在64位系统中就会有问题,因为64位系统中Pointer比int长,将Pointer值赋予int将导致地址数据丢失,最终导致严重问题。
留意那些和数位相关的数值计算
比如掩码技术,如果使用一个long类型的掩码,转到64位系统后高位都是0,计算出来的结果可能不符合预期。还有无符号整数和有符号整数的混用等。
留意对齐方式带来的变化
如果在32位系统上定义一个结构包含两个long类型,第二个long数值的偏移地址是4,可以通过结构地址+4的方式获取,但是在64位系统上就不行了,因为在64位系统中第二个long数值的偏移地址是8。
充分考虑在32位应用和64位应用之间的数据交换
因为用户会通过网络交换数据,同时用户保存的数据也可能通过备份等方式在32位系统和64位系统之间切换,所以应用在保存和发送流数据的时候一定要考虑充分。比如数据在32位系统中保存,在64位系统中能否正常打开,或者反过来,在64位系统中保存,在32位系统中打开是否正常。
重写所有汇编代码
这点无需说明,如果你在代码中嵌入了汇编代码,你需要参考64位系统的指令集重写汇编代码。
不要将可变参数的过程强制转换为定参过程,也不要将定参过程强制转换为可变参数的过程。
这时因为32位系统和64位系统对于这两种过程调用方式的处理方法不同。