我们正在从10.6移植到10.8的应用程序。我正在查看我们在应用中加载的dylib。我在垃圾收集工作队列面临非常不寻常的崩溃,并带有以下消息。dylib加载时垃圾收集工作队列崩溃
malloc: Thread::suspend(): unable to suspend a thread: err = 268435459, Thread 0x111000000: _pthread = 0x108129000, _thread = 0x8b07, _stack_base = 0x108129000, enlivening on, 0 local blocks
对于应用GCC_ENABLE_OBJC_GC = required
被设置。如果我在dylib中有GCC_ENABLE_OBJC_GC = required
,它仍然会崩溃。我无法在应用程序中关闭垃圾收集器。我必须从我的dylib管理它。
崩溃的原因结果是垃圾收集器无法暂停该线程。 (正如它在日志中所说)。此线程使用thread_create()创建。如果我在dylib的构造函数中放入一个无限循环(带睡眠),我不会崩溃。当构造函数完成其执行时,我会崩溃。
他们告诉垃圾收集器不要试图挂起线程吗?或者增加线程的引用计数?或者我可以做的任何事情来阻止垃圾回收器不会干扰我的dylib代码。
您能澄清一下:你打算让你的项目使用GC吗?或不?我的第一个猜测是你正在加载的dylib是使用GC构建的,但你的主应用程序不是。 – ipmcc 2013-02-12 13:03:23
我只是写dylib和加载dylib导致崩溃。构建应用程序以使用GC(GCC_ENABLE_OBJC_CC =必需)。如果我在dylib上启用或取消标志,那没关系。它仍然崩溃。 – MacGeek 2013-02-12 13:11:06
你使用哪种编译器? gcc版本?另外:什么是部署目标,基础SDK? – 2013-03-27 14:30:36