centos8下ibus-libpinyin不能出现输入框的问题

centos8下用yum install libpinyin之后,始终不能出现输入悬浮框,无法进行中文输入 ,但中文输入法的相关相关设置都没有问题。查看系统日志messages发现其中只出现这样的错误:
Unable to connect to ibus: Could not connect: Connection refused。

原先以为是gdk与ibus兼容的问题,试图重新编译ibus和ibus-libpinyin,在编译过程中需要解决依赖库的源码问题太多,遂暂时放弃。在这其中试图多次重装系统也未解决这问题,中间还导致与windows共存的一个分区被删除,丢失文件无算。网上查找各种方法无果,包括设置环境变量等等。

ps -ef|grep ibus, 发现加载的模块中没有ibus-engine-libpinyin,但其他的进程都有,说明ibus服务本本身没有问题,有问题的ibus-engine-libpinyin没有加载成功。
既然ibus-engine-libpinyin是个可执行文件,试图直接运行或者直接ld这个文件,出现kyotocabinet::File:rename symbol lookup error 错误,说明在动态链接时出现找不到符号的错误。于是ldd ibus-engine-libpinyin,发现与kyotocabinet相关的库为libkyotocabinet.so.16。

执行
readelf -sW libkyotocabinet.so.16|grep rename从libkyotocabinet.so.16查找rename
发现其对应的符号为
ZN12kyotocabinet4File6renameERKSsS2
经过c++filt转换后之后发现函数原型为:
kyotocabinet::File::rename(std::basic_string<char, std::char_traits, std::allocator > const&, std::basic_string<char, std::char_traits, std::allocator > const&)

发现函数是存在的,怀疑为kyotocabinet库版本的问题,
于是从kyotocabinet下载
下载最新的源码,进行编译,编译出libkyotocabinet.so.16库,
编译好后执行readelf -sW libkyotocabinet.so.16|grep rename,发现rename对应的符号
ZN12kyotocabinet4File6renameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8
经过c++filt转换后之后发现函数原型为
kyotocabinet::File::rename(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&)

可以发现函数原型在basic_string前面出现了cxx11,说明gcc的版本直接用了c11的标准编译c++,导致ibus-libpinyin找不到符号,说明yum源上的ibus-libpinyin编译用的是c11标准进行的编译,而其yum源上的libkyotocabinet.so.16版本不是用c++11标准进行编译的,导致出现错误。

最后解决办法:
用源代码编译出的libkyotocabinet.so.16,删除/lib64/libkyotocabinet.so.16,copy编译出的版本到lib64目录下,删除目录下的软链接,重新生成软链接,然后ldconfig即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值