应用程序在模拟器上运行,但不是 iPhone 6 plus
Posted
技术标签:
【中文标题】应用程序在模拟器上运行,但不是 iPhone 6 plus【英文标题】:App runs on simulator but not iPhone 6 plus 【发布时间】:2015-11-11 14:49:46 【问题描述】:我正在将在 Linux 上开发的库 (https://github.com/uzh-rpg/rpg_svo) 移植到 ios。目标设备是 iPhone 6 plus。第一步,我们设法将其移植到 Windows。此外,我们成功地让它在 iPhone 的 xcode 模拟器上运行。但是当尝试在 iPhone 上启动它时,应用程序在几个周期后崩溃并出现以下错误:
malloc: * 对象 0x12ce8c3d8 的错误:已释放对象的校验和不正确 - 对象可能在被释放后被修改。 * 在 malloc_error_break 中设置断点进行调试
更糟糕的是,崩溃是不可重复的。有时是早点崩溃,有时是晚点。由于它在模拟器中运行得很好,我们不能使用像“Guard Malloc”这样的内存管理工具。我们尝试了“Leaks”和“Zombies”乐器,但没有成功。
我们知道 iPhone 使用 ARM_NEON 指令集,而在 Mac Book 上我们使用 SSE2。这会是个问题吗? 此外,该库依赖于 Boost 线程。这可能是多线程问题吗?是什么让它在设备上崩溃但在模拟器中没有?我们是否可能遗漏了一个非常基本的观点?
提前致谢!期待回复:)
【问题讨论】:
我使用的是 iOS 9.1 和 Xcode 7.1.. 【参考方案1】:解决方案:
您必须使用以下标志为 iOS 编译 Boost
-DBOOST_SP_USE_SPINLOCK
您可以在此处使用已设置标志的我的 boost 编译脚本: https://github.com/danoli3/ofxiOSBoost/tree/master/scripts
关于这个 Boost Threads 问题的更多信息在这里: https://***.com/a/14738583/1676524
此博客上的问题的完整分解:http://preshing.com/20121019/this-is-why-they-call-it-a-weakly-ordered-cpu/
【讨论】:
以上是关于应用程序在模拟器上运行,但不是 iPhone 6 plus的主要内容,如果未能解决你的问题,请参考以下文章
indexPath.row 在 iPhone 6 模拟器上的计算不正确,但不是 4s/5/5s/6plus
OCUnit 是不是允许在 iPhone 模拟器上运行应用程序测试?