应用程序在模拟器上运行,但不在iPhone 6 plus上运行

时间:2015-11-11 14:49:46

标签: boost

我正在移植一个在Linux上开发到iOS的库(https://github.com/uzh-rpg/rpg_svo)。目标设备是iPhone 6 plus。在第一步中,我们设法将其移植到Windows。此外,我们成功地让它在iPhone的xcode模拟器上运行。但是当试图在iPhone上启动它时,应用程序在几个周期后崩溃并出现以下错误:

malloc: *对象0x12ce8c3d8的错误:释放对象的校验和不正确 - 对象可能在被释放后被修改。 * 在malloc_error_break中设置断点以进行调试

更糟糕的是,崩溃是不可重复的。有时候有时候会很快崩溃。由于它在模拟器中运行得很好,我们不能使用像“Guard Malloc”这样的内存管理工具。我们尝试了'Leaks'和'Zombies'Instruments而没有任何成功。

我们知道iPhone使用ARM_NEON指令集,而在Mac Book上我们有SSE2。这可能是个问题吗? 此外,库依赖于Boost线程。这可能是一个多线程问题吗?是什么让它在设备上崩溃但不在模拟器中崩溃?我们可能错过了一个非常基本的观点吗?

提前致谢!期待回复:)

1 个答案:

答案 0 :(得分:0)

解决方案:

您必须使用以下标志

编译Boost for iOS
  

-DBOOST_SP_USE_SPINLOCK

你可以在我的boost编译脚本中设置已经设置的标志: https://github.com/danoli3/ofxiOSBoost/tree/master/scripts

有关此Boost线程问题的更多信息,请访问: https://stackoverflow.com/a/14738583/1676524

在此博客上彻底解决了问题:http://preshing.com/20121019/this-is-why-they-call-it-a-weakly-ordered-cpu/