编译Tesseract训练工具时遇uchar.h及ICU版本兼容错误
解决Tesseract训练工具编译时
U_RIGHT_TO_LEFT_ISOLATE未定义的错误 我来帮你搞定这个编译问题,之前在CentOS 7环境下编译Tesseract训练工具时,也碰到过完全一样的报错,下面给你一步步拆解解决:
先理清核心问题
报错里的U_RIGHT_TO_LEFT_ISOLATE是ICU(International Components for Unicode)库从52版本才新增的方向控制宏,而CentOS/RHEL 7默认自带的ICU版本是50,刚好没有这个定义,所以编译直接卡在这里了。
关于你找到的两个uchar.h
/usr/include/uchar.h是C标准库的头文件,和ICU半毛钱关系都没有,绝对不要碰它!/usr/include/unicode/uchar.h才是ICU库的核心头文件,我们要修改或者适配的就是这个文件。
两种解决方案任你选
方案一:临时补全宏定义(快速救急)
如果只是想快速编译通过训练工具,不想折腾升级ICU,可以手动把缺失的宏加到ICU的头文件里:
- 用编辑器打开
/usr/include/unicode/uchar.h - 找到文件里其他类似的方向宏(比如
U_RIGHT_TO_LEFT、U_LEFT_TO_RIGHT这些)的位置,在附近添加两行:#define U_RIGHT_TO_LEFT_ISOLATE 0x10000004 #define U_LEFT_TO_RIGHT_ISOLATE 0x10000005 - 保存文件后,回到Tesseract的编译目录重新执行
make就行。
注意:这个方法属于临时适配,后续如果编译其他依赖ICU的功能,可能还会碰到其他兼容性问题,适合应急用。
方案二:升级ICU到52+版本(彻底解决)
想一劳永逸解决问题,最好还是升级ICU到符合要求的版本,步骤如下:
- 下载ICU 52及以上版本的源码(比如52.1版本,是比较稳定的选择)
- 解压后进入源码的
source目录:cd icu/source - 配置编译参数,指定安装路径(避免覆盖系统默认的旧版本ICU):
./configure --prefix=/usr/local/icu52 - 编译并安装:
make && sudo make install - 编译Tesseract训练工具时,指定使用新安装的ICU:
./configure --with-icu=/usr/local/icu52 make
小贴士:如果升级后系统里其他依赖旧ICU的程序出问题,可以用
LD_LIBRARY_PATH=/usr/local/icu52/lib临时指定新ICU的库路径来运行Tesseract训练工具,或者编译时选择静态链接ICU,避免动态库冲突。
内容的提问来源于stack exchange,提问作者forever
相关产品推荐
相关产品推荐

