You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译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的头文件里:

  1. 用编辑器打开/usr/include/unicode/uchar.h
  2. 找到文件里其他类似的方向宏(比如U_RIGHT_TO_LEFT、U_LEFT_TO_RIGHT这些)的位置,在附近添加两行:
    #define U_RIGHT_TO_LEFT_ISOLATE 0x10000004
    #define U_LEFT_TO_RIGHT_ISOLATE 0x10000005
    
  3. 保存文件后,回到Tesseract的编译目录重新执行make就行。

注意:这个方法属于临时适配,后续如果编译其他依赖ICU的功能,可能还会碰到其他兼容性问题,适合应急用。

方案二:升级ICU到52+版本(彻底解决)

想一劳永逸解决问题,最好还是升级ICU到符合要求的版本,步骤如下:

  1. 下载ICU 52及以上版本的源码(比如52.1版本,是比较稳定的选择)
  2. 解压后进入源码的source目录:
    cd icu/source
    
  3. 配置编译参数,指定安装路径(避免覆盖系统默认的旧版本ICU):
    ./configure --prefix=/usr/local/icu52
    
  4. 编译并安装:
    make && sudo make install
    
  5. 编译Tesseract训练工具时,指定使用新安装的ICU:
    ./configure --with-icu=/usr/local/icu52
    make
    

小贴士:如果升级后系统里其他依赖旧ICU的程序出问题,可以用LD_LIBRARY_PATH=/usr/local/icu52/lib临时指定新ICU的库路径来运行Tesseract训练工具,或者编译时选择静态链接ICU,避免动态库冲突。

内容的提问来源于stack exchange,提问作者forever

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:51:23