我一直有與ICU的基於規則的Transliterator問題,這竟然是一個缺少-O2
標誌的調試版本使用G ++ 4.7.1引起工作。這是工作正常,當我做了一個發佈版本(其中有-O2
),但是當我建立我的項目沒有這種標誌調試,Transliterator
對象永遠不會被正確創建。ICU Transliterator不無-02標誌使用g ++
Transliterator* t = Transliterator::createFromRules(id, rules, UTRANS_FORWARD, parseError, status);
沒有優化,t
被分配一個空指針和status
設置爲32767,在通過ICU的u_errorName()
運行翻譯爲BOGUS UErrorCode
。
我嘗試的第一件事是從我的版本中刪除-g
調試標誌,但這對createFromRules()
返回的內容沒有任何影響。只有當我加入-O2
時,它才創建了Transliterator
對象。
測試表明-O1
,-O2
和-O3
都按預期工作,只有-O0
導致發生此情況。
有人可以解釋爲什麼這應該是這樣嗎?
它看起來像*使用調試器的*完美局面。 – 2012-08-15 18:11:51
@ n.m。那麼,我想我可以用調試符號重建ICU ... – SigueSigueBen 2012-08-15 18:57:19
@ n.m。通常這是另一種方式 - 調試模式'解決'它! – 2012-08-15 20:09:40