openEuler openEuler 24.03 LTS SP3 CEF+QT启动不了的问题

openEuler openEuler 24.03 LTS SP3 使用QT6.10.2 环境下不能启动QT+CEF框架,两个各自运行均可弹窗demo,QT调用CEF一直报ICU错误,CEF版本也尝试了很多版本,都是一样的报错。

比如cef144,125,115等不同版本

您遇到的 ICU 错误是典型的 ICU 库版本冲突问题,根本原因在于:

  1. QT 6.10.2 在 openEuler 24.03 LTS SP3 上默认动态链接系统 ICU 库(ICU 73+)

  2. CEF 内部静态捆绑特定版本 ICU(不同 CEF 版本对应 ICU 69~74)

  3. 两者同时初始化时发生:

    • 符号冲突(相同函数名但不同实现)

    • icudtl.dat 数据文件版本不匹配

    • 初始化顺序错误导致 “Invalid file descriptor to ICU data received”

CEF 的 ICU 是静态编译进 libcef.so 的,无法与系统 ICU 共存,必须确保 CEF 能独立找到自己的 icudtl.dat

确认 ICU 版本冲突

# 查看 CEF 所需 ICU 版本(以 CEF 125 为例)
strings /path/to/libcef.so | grep -i "icu.*version"
# CEF 125 对应 ICU 73,CEF 115 对应 ICU 72

建议重新编译 QT 6 以静态链接 ICU

# 1. 下载匹配 CEF 的 ICU 源码(例如 ICU 73)
wget https://github.com/unicode-org/icu/releases/download/release-73-2/icu4c-73_2-src.tgz
tar xzf icu4c-73_2-src.tgz
cd icu/source
./configure --prefix=/opt/icu73 --disable-shared --enable-static
make -j$(nproc) && make install

# 2. 重新编译 QT 6.10.2(静态链接 ICU)
cd /path/to/qt6-source
./configure \
  -prefix /opt/qt6-cef \
  -release \
  -static \
  -no-feature-icu \          # 完全禁用 ICU(CEF 会提供)
  -skip qtwebengine \        # 避免 QT WebEngine 与 CEF 冲突
  -xcb \
  -openssl-linked \
  -system-zlib \
  -nomake examples \
  -nomake tests

make -j$(nproc) && make install