在Ubuntu 22.04上编译Unikey时遇到窄化转换类编译错误
在Ubuntu 22.04上编译Unikey时遇到窄化转换类编译错误
看起来你遇到的是新版本GCC编译器严格检查窄化转换导致的编译错误,这在Ubuntu 22.04上很常见——因为它默认使用的GCC 11会严格执行C++11及以后的标准,而Unikey的旧版源码没有适配这个规则。我给你几个可行的解决办法:
方法一:添加编译选项禁用窄化转换检查
这个方法直接修改编译参数,让编译器忽略窄化转换的错误提示:
- 进入Unikey源码的
src目录:cd /home/username/Downloads/x-unikey-1.0.4/src - 修改
Makefile,在编译参数中加入-Wno-narrowing:
你可以用sed命令快速修改,避免手动编辑出错:
如果手动编辑的话,找到sed -i 's/CXXFLAGS = /CXXFLAGS = -Wno-narrowing /' MakefileCXXFLAGS开头的行,在后面加上-Wno-narrowing即可。 - 回到源码根目录,清理之前的编译残留后重新编译:
cd .. make clean make
方法二:指定用旧版C++标准编译
如果方法一没有效果,我们可以强制编译器用C++03标准编译(这个标准没有窄化转换的严格检查):
- 先清理之前的编译配置和残留文件:
make distclean - 重新运行
configure并指定C++标准:./configure CXXFLAGS="-std=c++03" - 执行编译:
make
这两个方法应该能解决你遇到的窄化转换编译错误,顺利完成Unikey的编译安装。
备注:内容来源于stack exchange,提问作者Mikochien
相关产品推荐
相关产品推荐

