4.2.x 设备上奇怪的 iOS 5.0 SDK GCC 副作用

Posted

技术标签:

【中文标题】4.2.x 设备上奇怪的 iOS 5.0 SDK GCC 副作用【英文标题】:weird iOS 5.0 SDK GCC side effect on 4.2.x devices 【发布时间】:2012-01-20 16:35:43 【问题描述】:

我正在针对 5.0 sdk GCC 构建一个库并在 4.2.x 设备上运行代码。

我没有在这一层使用 5.0 Objective-c 特定调用,并且该项目与 4.0+ 兼容。

我在我的库中看到了一些与我的 if 块非常奇怪的行为。

通常这应该可以工作

BYTE    byteVal : 1;

byteVal = FALSE;

if (byteVal)
    // ALWAYS RUNS

问题在于 if 块中的代码总是在执行。

这导致我使用 zlib gzip 功能出现问题。 4.2.x 操作系统是否使用了一些偏移量或不同的寄存器对齐方式,这与使用较新的 GCC 构建时不标准?

我不知道这里发生了什么以及为什么在 4.2.x 设备上总是失败。

有什么想法吗?

【问题讨论】:

真正的问题(不暗示它不正确或任何东西 - 不是专家) - 这是整个代码(我的意思是,extern ... 类型的块中的 BYTE byteVal : 1 不是吗?)? byteVal是一个成员变量。 我也遇到了 zlib gzip 中的 read() 问题,我无法读取磁盘上的文件。它总是返回读取的 0 个字节。 所有这些代码都适用于 ios 5.0 设备 你能发布实际的结构定义和你使用它的相关真实代码吗?你打开所有警告了吗? 【参考方案1】:

使用

if (byteVal == 1)

使用单个位宽的成员变量存在一些问题,即 if (byteVal) 始终为真,即使它不是。

【讨论】:

以上是关于4.2.x 设备上奇怪的 iOS 5.0 SDK GCC 副作用的主要内容,如果未能解决你的问题,请参考以下文章

iOS 5.0 SDK - USB 主机 OTG

iOS 7 设备上的键盘动画问题

新的 paypal ios sdk 在设备中不工作

虽然 ios 6.1 作为基础 sdk xcode 5 为 ios 7 构建 ipa

Facebook iOS SDK 不存储用于访问的 cookie

在开发人员设备上安装以前版本的 iOS(当前为 5.0 -> 想要 4.3.5)