Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
G++ ICU音译词不';t在没有-O2标志和g+的情况下工作+;_G++_Icu - Fatal编程技术网

G++ ICU音译词不';t在没有-O2标志和g+的情况下工作+;

G++ ICU音译词不';t在没有-O2标志和g+的情况下工作+;,g++,icu,G++,Icu,我一直在使用ICU的基于规则的音译器时遇到问题,这是由于在使用g++4.7.1的调试版本中缺少-O2标志造成的。当我做一个发布版本(它有-O2)时,它工作得很好,但是当我在没有调试标志的情况下构建项目时,音译器对象将永远无法正确创建 Transliterator* t = Transliterator::createFromRules(id, rules, UTRANS_FORWARD, parseError, status); 在未进行优化的情况下,t被分配一个空指针,status被设置为3

我一直在使用ICU的基于规则的音译器时遇到问题,这是由于在使用g++4.7.1的调试版本中缺少
-O2
标志造成的。当我做一个发布版本(它有
-O2
)时,它工作得很好,但是当我在没有调试标志的情况下构建项目时,
音译器
对象将永远无法正确创建

Transliterator* t = Transliterator::createFromRules(id, rules, UTRANS_FORWARD, parseError, status);
在未进行优化的情况下,
t
被分配一个空指针,
status
被设置为32767,当通过ICU的
u errorName()
运行时,这将转换为
伪UErrorCode

我尝试的第一件事是从我的构建中删除
-g
调试标志,但这对
createFromRules()
返回的内容没有影响。只有当我添加了
-O2
时,它才创建了
音译器
对象

测试表明
-O1
-O2
-O3
均按预期工作,只有
-O0
导致这种情况发生


有人能解释一下为什么会出现这种情况吗?

在调试/不调试的情况下,不应该有不同的结果。你能创建一个包含规则的小测试用例,给出ICU版本和操作系统/平台,并提交一张罚单吗?4.7.1于2个月前发布。可能是编译器错误(ICU有很长的查找这些错误的历史!!)或潜在错误。您可以将错误与此问题联系起来,反之亦然。

这似乎是使用调试器的最佳情况。@n.m.嗯,我想我可以用调试符号重建ICU…@n.m.通常是另一种方式-调试模式“解决”它@SigueSigueBen所有的规则都会这样,还是只有一套规则会这样?@Stevenrroomis我只试过一套规则。但是,在函数调用之前,我检查了UnicodeString以确保其内容正确。我应该补充一点,
parseError
的行号和列号设置超出了我的规则集的范围,但都是非负的。@SigueSigueBen您能在这里包括规则集吗?否则很难分析。或者,可以尝试一个简单的规则,比如
a>B
@StevenrLoom甚至是一条像
v>w这样的琐碎规则
-O0
一起失败,但与
-O2
@SigueSigueBen一起工作。如果我不清楚,我很抱歉。您仍然没有提供足够的信息:您没有指出您所在的平台、处理器体系结构以及ICU的版本。在我的第一个回答中,我是在问这些问题。在任何情况下,我建议在提交bug报告-这不是提交bug的合适论坛。