我們正在從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