我一直有与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