openEuler openEuler 24.03 LTS SP3 使用QT6.10.2 环境下不能启动QT+CEF框架,两个各自运行均可弹窗demo,QT调用CEF一直报ICU错误,CEF版本也尝试了很多版本,都是一样的报错。
比如cef144,125,115等不同版本
openEuler openEuler 24.03 LTS SP3 使用QT6.10.2 环境下不能启动QT+CEF框架,两个各自运行均可弹窗demo,QT调用CEF一直报ICU错误,CEF版本也尝试了很多版本,都是一样的报错。
比如cef144,125,115等不同版本
您遇到的 ICU 错误是典型的 ICU 库版本冲突问题,根本原因在于:
QT 6.10.2 在 openEuler 24.03 LTS SP3 上默认动态链接系统 ICU 库(ICU 73+)
CEF 内部静态捆绑特定版本 ICU(不同 CEF 版本对应 ICU 69~74)
两者同时初始化时发生:
符号冲突(相同函数名但不同实现)
icudtl.dat 数据文件版本不匹配
初始化顺序错误导致 “Invalid file descriptor to ICU data received”
CEF 的 ICU 是静态编译进 libcef.so 的,无法与系统 ICU 共存,必须确保 CEF 能独立找到自己的
icudtl.dat。
# 查看 CEF 所需 ICU 版本(以 CEF 125 为例)
strings /path/to/libcef.so | grep -i "icu.*version"
# CEF 125 对应 ICU 73,CEF 115 对应 ICU 72
# 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