JackieMium / my_blog

在 Issues 中建立的个人博客
GNU General Public License v3.0
31 stars 12 forks source link

解决 Debian 中 RStudio 和 Mendeley 下 Fcitx 输入法不能使用的问题 #12

Open JackieMium opened 6 years ago

JackieMium commented 6 years ago
2018-12-08 更新

最新的 RStudio 版本为 1.2.1114,Qt 版本为 Qt-5.11.1。RStudio 自带的 libQt5* 文件保存在 /usr/lib/rstudio/lib 下,按照之前的方法移除这些文件的办法又失效了。不得已只能又一次自己编译了。 简单记录如下:

export PATH=/opt/qt5/5.11.1/gcc_64/bin:$PATH
export LD_LIBRARY_PATH=/opt/qt5/5.11.1/gcc_64/lib:$LD_LIBRARY_PATH

# double check
echo $PATH
echo $LD_LIBRARY_PATH

cd /path/to/fcitx-qt5
cmake .
make -j 4

最新的 libfcitxplatforminputcontextplugin.so 已经同步更新到我的 repo,不会或者懒得编译的人自己去下载吧。


2018-08-16 重要更新

目前发现一种最最最最最最简单的办法。Debian 下进入 /usr/lib/rstudio/bin 目录,直接~删掉~所有 libQt5 开头的文件和 qt.conf 即可(测试时不要直接删掉,重命名备份就行了)。 我的做法是:

cd /usr/lib/rstudio/bin
sudo mkdir Qt
sudo mv libQt5* Qt
sudo mv qt.conf Qt

然后再打开 RStudio 测试 Fcitx 输入法是否可用。

这个方法的原理在于,Fcitx 在 RStudio 里不能用是因为 RStudio 使用的 Qt 库版本与系统版本不同,而我们系统的 Fcitx 在编译时是链接到系统的 Qt 库版本的。而我们把 RStudio 自带的 Qt 库删掉之后会迫使 RStudio 调用系统的 Qt 库,即迫使它调用了 Fcitx 一样的版本库,所以这时候 RStudio 和其他 Qt 程序一样就能直接调用 Fcitx 本来的插件了( libfcitxplatforminputcontextplugin.so 这个插件在 Debian 就是 fcitx-frontend-qt5 这个包)。

说明

这个方法并不是我想到的,来自统计之都论坛的一篇帖子: win10下Rstudio切换中文输入法问题 。感谢 @linjinzhen !

以下为更新前原文。


2017-12-20

一直以来 QT-based App 下 Fcitx 无法输入中文的问题都让我很恼火,用的比较多的 RStudio 先后两次去 Support 发帖无果,在他们的 GitHub 也发了 Issue,他们标记了 bug 之后就啥也没干。Mendeley 也去发帖过一次,官方回复大概意思是“知道了,但是目前这个问题优先级很低”.....

网上看到过几次有人说自己编译 QTfcitx-qt 得到 libfcitxplatforminputcontextplugin.so放到指定位置就可以。我试过下载别人编译好的试过都没成功,自己不是很会编译啥的怕把系统组件搞乱又懒得编译.....直到前天又看到 Mendeley Fcitx Problem 这个帖子,在下面留言,po 主表示多几个 QT 也不会搞坏系统我才决定尝试下。

其实以前用的是 Zotero 用来管理文献,也写过另一篇博文 #5 ,后来某一次升级之后 Zotero 就打不开了.....终端打开没有任何提示信息。可惜我整理得好好的文献库也没了。然后我就转到 Mendeley 了。

好的,废话少说,Let's get started!

Qt 编译安装

发现 Mendeley Desktop 使用的 Qt 5.5.1 。

下载 qt-everywhere-opensource-src-5.5.1.tar.xz 并解压,进入目录。

# 准备安装 QT 的目录
sudo mkdir /opt/qt.5..5.1
./configure --prefix=/opt/qt5.5.1 -no-openssl

碰到一大堆报错 XCB 啥的,查了下直接加 -qt-xcb 就行了,我也不知道 XCB 干嘛的,这不是重点。 (configure --help 可以获得编译 Qt 详尽的选项说明)

./configure --prefix=/opt/qt5.5.1 -no-openssl -qt-xcb

顺利同过。然后三部曲后两步:

make -j4
# 燃烧吧 CPU。
# 我的 Intel Core i5-6300HQ @ 4x 3.2GHz 大概编了 20~30min。
sudo make install

fcitx-qt5

接下来是 fcitx-qt5。在编译它之前要让刚刚编译好的 Qt 发挥作用,所以要改路径,我的做法也是临时export一下,只要这个终端不关都能起作用,但是要记得后面的过程都在这个终端完成。

export PATH="/opt/qt5.5.1/bin/:$PATH"

git clone https://github.com/fcitx/fcitx-qt5.git
cd fcitx-qt5
cmake .

是的,又有问题了。

CMake Error at CMakeLists.txt:8 (find_package):
  Could not find a package configuration file provided by "ECM" (requested
  version 1.4.0) with any of the following names:

    ECMConfig.cmake
    ecm-config.cmake

  Add the installation prefix of "ECM" to CMAKE_PREFIX_PATH or set "ECM_DIR"
  to a directory containing one of the above files.  If "ECM" provides a
  separate development package or SDK, be sure it has been installed.

-- Configuring incomplete, errors occurred!
See also "/path/to/fcitx-qt5/CMakeFiles/CMakeOutput.log".

Google 一下,哦,sudo apt install extra-cmake-modules 就行了。继续:

cmake .

# 错误又来了
-- Could NOT find XKBCommon_XKBCommon (missing: XKBCommon_XKBCommon_LIBRARY XKBCommon_XKBCommon_INCLUDE_DIR) 
CMake Error at /usr/share/cmake-3.9/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
  Could NOT find XKBCommon (missing: XKBCommon_LIBRARIES XKBCommon) (Required
  is at least version "0.5.0")
Call Stack (most recent call first):
  /usr/share/cmake-3.9/Modules/FindPackageHandleStandardArgs.cmake:377 (_FPHSA_FAILURE_MESSAGE)
  cmake/FindXKBCommon.cmake:30 (find_package_handle_standard_args)
  CMakeLists.txt:33 (find_package)

-- Configuring incomplete, errors occurred!
See also "/path/to/fcitx-qt5/CMakeFiles/CMakeOutput.log".

WTF???....不要急不要急,Google 一下,哦,sudo apt install libxkbcommon-dev。继续:

cmake .

# 呵呵
-- Found XKBCommon_XKBCommon: /usr/lib/x86_64-linux-gnu/libxkbcommon.so (found version "0.7.1") 
-- Found XKBCommon: /usr/lib/x86_64-linux-gnu/libxkbcommon.so (found suitable version "0.7.1", minimum required is "0.5.0") found components:  XKBCommon 
CMake Error at CMakeLists.txt:36 (find_package):
  By not providing "FindFcitx.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "Fcitx", but
  CMake did not find one.

  Could not find a package configuration file provided by "Fcitx" (requested
  version 4.2.8) with any of the following names:

    FcitxConfig.cmake
    fcitx-config.cmake

  Add the installation prefix of "Fcitx" to CMAKE_PREFIX_PATH or set
  "Fcitx_DIR" to a directory containing one of the above files.  If "Fcitx"
  provides a separate development package or SDK, be sure it has been
  installed.

-- Configuring incomplete, errors occurred!
See also "/path/to/fcitx-qt5/CMakeFiles/CMakeOutput.log".

哦,知道了,Google。哦,sudo apt install fcitx-libs-dev。好,继续:

cmake .
#  过了..............
make -j4

手别抖不要惯性 sudo make install,不需要。 现在platforminputcontext目录下应该已经有了新鲜出炉的libfcitxplatforminputcontextplugin.so了,然后就好了:

sudo cp platforminputcontext/libfcitxplatforminputcontextplugin.so /opt/mendeleydesktop/plugins/qt/plugins/platforminputcontexts

终端打开 Mendeley 试试 Fcitx 已经可以用了。不保险,直接鼠标点点点菜单找到 Mendeley 打开输入法还没挂,OK。

RStudio

接下来一样,在 RStudio 菜单的关于里看了下,基于 Qt-5.4.0,那就下载qt-everywhere-opensource-src-5.4.0.tar.xz好了。 以为可以收工了?怎么可能,Naive。

./configure --prefix=/opt/qt.5.4.0 -no-openssl -qt-xcb 直接报错:

ln -s libQt5Widgets.so.5.4.0 libQt5Widgets.so
ln -s libQt5Widgets.so.5.4.0 libQt5Widgets.so.5
ln -s libQt5Widgets.so.5.4.0 libQt5Widgets.so.5.4
rm -f ../../lib/libQt5Widgets.so.5.4.0
mv -f libQt5Widgets.so.5.4.0  ../../lib/ 
rm -f ../../lib/libQt5Widgets.so
rm -f ../../lib/libQt5Widgets.so.5
rm -f ../../lib/libQt5Widgets.so.5.4
mv -f libQt5Widgets.so ../../lib/ 
mv -f libQt5Widgets.so.5 ../../lib/ 
mv -f libQt5Widgets.so.5.4 ../../lib/ 
make[3]: Leaving directory '/home/adam/Downloads/Persepolis/qt-everywhere-opensource-src-5.4.0/qtbase/src/widgets'
make[2]: Leaving directory '/home/adam/Downloads/Persepolis/qt-everywhere-opensource-src-5.4.0/qtbase/src'
Makefile:45: recipe for target 'sub-src-make_first' failed
make[1]: *** [sub-src-make_first] Error 2
make[1]: Leaving directory '/home/adam/Downloads/Persepolis/qt-everywhere-opensource-src-5.4.0/qtbase'
Makefile:70: recipe for target 'module-qtbase-make_first' failed
make: *** [module-qtbase-make_first] Error 2

一头雾水,连报错信息都基本没有。二话不说,Google,靠谱的办法试试看,比如这个帖子:Build Qt Static Make Error - [SOLVED], 官方论坛官方回答,看着靠谱。哦:

./configure --prefix=/opt/qt.5.4.0 -release -opensource -confirm-license -static -qt-xcb -no-openssl -no-glib -no-pulseaudio -no-alsa -opengl desktop -nomake examples -nomake tests

# 然后真的过了
make -j4
# 燃烧吧 CPU。Winter is Coming!!!!!!

rm -f ../../lib/libQt5Widgets.a
mv -f libQt5Widgets.a ../../lib/ 
make[3]: Leaving directory '/home/adam/Downloads/Persepolis/qt-everywhere-opensource-src-5.4.0/qtbase/src/widgets'
make[2]: Leaving directory '/home/adam/Downloads/Persepolis/qt-everywhere-opensource-src-5.4.0/qtbase/src'
Makefile:45: recipe for target 'sub-src-make_first' failed
make[1]: *** [sub-src-make_first] Error 2
make[1]: Leaving directory '/home/adam/Downloads/Persepolis/qt-everywhere-opensource-src-5.4.0/qtbase'
Makefile:70: recipe for target 'module-qtbase-make_first' failed
make: *** [module-qtbase-make_first] Error 2

还是上面那个报错....我也不知道为啥了,好吧老实点先把不知道的选项拿掉,本着对官方论坛官方回答的相信,那一堆复制过来的的选项我都没看。重新来过:

./configure --prefix=/opt/qt.5.4.0 -release -opensource -confirm-license -no-openssl -qt-xcb -nomake examples -nomake tests

...........

Makefile:45: recipe for target 'sub-src-make_first' failed
make[1]: *** [sub-src-make_first] Error 2
make[1]: Leaving directory '/home/adam/Downloads/Persepolis/qt-everywhere-opensource-src-5.4.0/qtbase'
Makefile:70: recipe for target 'module-qtbase-make_first' failed
make: *** [module-qtbase-make_first] Error 2

报错依然,上网一顿查,Google 看了 N 多都是交叉编译的问题,感觉很奇怪而且错误和我不完全一样。百度,各种论坛都是提问题的没有回答的。

N 久无果,中间 2~3个小时过去了。

我开始思索是不是我哪里做法有问题。

这时我突然记起来之前尝试编译 RStudio 的时候,从 RStudio 的 GitHub 里的安装依赖的脚本里看到编译 RStudio 的时候会依照里面的设置从他们自己的 AWS 服务器上下载他们精(魔)简(改)的 QT binary 的。这洋一想我直接去用他们的 QT 编译岂不是更好。二话不说去 GitHub 看他们的 QT 放在哪儿。你看他们的 rstudio/dependencies/linux/install-qt-sdk里写的:

# presume 5.4.0
QT_VERSION=5.4.0

# test for libgstreamer
which apt-cache > /dev/null
if [ $? == 0 ]; then
  # debian (currently no test for CentOS based systems)
  apt-cache show libgstreamer1.0 > /dev/null
  if [ $? == 0 ]; then
    QT_VERSION=5.4.2
  fi
fi

QT_SDK_BINARY=QtSDK-${QT_VERSION}-${QT_ARCH}.tar.gz
QT_SDK_URL=https://s3.amazonaws.com/rstudio-buildtools/$QT_SDK_BINARY

# set Qt SDK dir if not already defined
if [ -z "$QT_SDK_DIR" ]; then
  QT_SDK_DIR=~/Qt${QT_VERSION}
fi

if ! test -e $QT_SDK_DIR
then
   # download and install
   wget $QT_SDK_URL -O /tmp/$QT_SDK_BINARY
   cd `dirname $QT_SDK_DIR`
   tar xzf /tmp/$QT_SDK_BINARY
   rm /tmp/$QT_SDK_BINARY
else
   echo "Qt $QT_VERSION SDK already installed"
fi

暴力暴力,够社会。

直接自己拼接出 QtSDK-5.4.0 的地址下下来了。由于这个已经是 binary 了就不需要我再编译了,直接用就行。 然后就是跟前面差不多了,十分顺利,没出错。解压他们的 QT 放到 /opt/qt.5.4.0,然后重新编译 fictx-qt5,得到libfcitxplatforminputcontextplugin.so

刚刚是 Mendeley 所以最后libfcitxplatforminputcontextplugin.so就拷贝到/opt/mendeleydesktop/plugins/qt/plugins/platforminputcontexts/,即谁要给谁。同理,RStudio 就应该拷贝到/usr/lib/rstudio/bin/plugins/platforminputcontexts/了。

然后试了下 RStudio 终于,Fcitx 起来了。

总结

看起来我这个基本上一个小时能解决,事实上我从昨晚到现在,用的总时间起码昨晚 3+ 小时,今天早上到现在下午起码 4+ 小时。中间我为了记录过程开了一个记事本现在 600+ 行了.....庭有枇杷树,吾妻死之年手植也,今已亭亭如盖矣。 但是我仍然很开心,我觉得我知道了一些新东西,踩了一些新的坑,问题最后也解决了(大概下次谁更新了可能会再来一次,但下次应该就轻车熟路了)。

哦对了,我自己编译的 libfcitxplatforminputcontextplugin.so 我建了一个 repo,也许谁要用的话可以试一试,在知乎上碰到以为用 Ubuntu 16.04 的知友用了我编译的文件解决了 ta 的输入法问题,我表示很开心。

说了这么多,总结:

  1. Google;
  2. 耐心;
  3. 尝试。

放在最后不代表不重要

  1. 编译 Qt 的configure : 在/opt建立相应文件夹后,再建立一个指向这个文件夹的软链接qt5。这么做的理由在 BLFS 的 HandBook 中编译 Qt5 有说明:Qt-5.4.2 ,深以为然。

    ../configure -v -prefix /opt/qt5 -shared -largefile -accessibility -no-qml-debug -force-pkg-config \
    -release -opensource -confirm-license -optimized-qmake \
    -system-zlib -no-mtdev -system-libpng -system-libjpeg -system-freetype -fontconfig -system-harfbuzz \
    -no-compile-examples -icu -qt-xcb -qt-xkbcommon -xinput2 -glib \
    -no-pulseaudio -no-alsa -gtkstyle -no-openssl \
    -nomake examples -nomake tests -no-compile-examples -skip qtdoc

    具体参数的含义还是去看 help 输出。

  2. 编译安装完 Qt 后,首先应该把 Qt 的bin 目录加到PATH里,这里的建议还是export这样做。 比较重要的是LD_LIBRARY_PATH的问题。 首先看看最终我们需要的libfcitxplatforminputcontextplugin.so到底需要些什么:

    ➜  ~ ldd /opt/mendeleydesktop/plugins/qt/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so
    linux-vdso.so.1 (0x00007ffc89d4a000)
    libQt5Gui.so.5 => /opt/qt.5.5.1/lib/libQt5Gui.so.5 (0x00007faee03c0000)
    libQt5DBus.so.5 => /opt/qt.5.5.1/lib/libQt5DBus.so.5 (0x00007faee0d24000)
    libxkbcommon.so.0 => /usr/lib/x86_64-linux-gnu/libxkbcommon.so.0 (0x00007faee0180000)
    libQt5Core.so.5 => /opt/qt.5.5.1/lib/libQt5Core.so.5 (0x00007faedfcc6000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007faedf941000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007faedf5ae000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007faedf396000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007faedefdc000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007faededbe000)
    libpng16.so.16 => /usr/lib/x86_64-linux-gnu/libpng16.so.16 (0x00007faedeb8b000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007faede971000)
    libGL.so.1 => /usr/lib/x86_64-linux-gnu/libGL.so.1 (0x00007faede6e5000)
    libicui18n.so.57 => /usr/lib/x86_64-linux-gnu/libicui18n.so.57 (0x00007faede271000)
    libicuuc.so.57 => /usr/lib/x86_64-linux-gnu/libicuuc.so.57 (0x00007faeddecc000)
    libicudata.so.57 => /usr/lib/x86_64-linux-gnu/libicudata.so.57 (0x00007faedc44f000)
    libpcre16.so.3 => /usr/lib/x86_64-linux-gnu/libpcre16.so.3 (0x00007faedc1e8000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007faedbfe4000)
    libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007faedbde2000)
    libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007faedbace000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007faedb8c6000)
    /lib64/ld-linux-x86-64.so.2 (0x00007faee0b79000)
    libGLX.so.0 => /usr/lib/x86_64-linux-gnu/libGLX.so.0 (0x00007faedb695000)
    libGLdispatch.so.0 => /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007faedb3df000)
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007faedb16d000)
    libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007faedae2d000)
    libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007faedac1b000)
    libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007faeda9f3000)
    libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007faeda7ef000)
    libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007faeda5e9000)
    libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007faeda3d4000)

    发现对于对应 Qt 的话,需要libQt5Gui.so.5libQt5DBus.so.5libQt5Core.so.5这三个库。 看看系统到底有没有这 3 个库呢:

    ➜  ~ locate libQt5Core.so.5
    /home/adam/.aspera/connect/lib/libQt5Core.so.5
    /home/adam/Downloads/Persepolis/qt-everywhere-opensource-src-5.5.1/qtbase/lib/libQt5Core.so.5
    /home/adam/Downloads/Persepolis/qt-everywhere-opensource-src-5.5.1/qtbase/lib/libQt5Core.so.5.5
    /home/adam/Downloads/Persepolis/qt-everywhere-opensource-src-5.5.1/qtbase/lib/libQt5Core.so.5.5.1
    /home/adam/Programs/foxitsoftware/lib/libQt5Core.so.5
    /home/adam/Programs/foxitsoftware/lib/libQt5Core.so.5.3
    /home/adam/Programs/foxitsoftware/lib/libQt5Core.so.5.3.2
    /home/adam/miniconda3/envs/Python_27/lib/libQt5Core.so.5
    /home/adam/miniconda3/envs/Python_27/lib/libQt5Core.so.5.6
    /home/adam/miniconda3/envs/Python_27/lib/libQt5Core.so.5.6.2
    /home/adam/miniconda3/lib/libQt5Core.so.5
    /home/adam/miniconda3/lib/libQt5Core.so.5.6
    /home/adam/miniconda3/lib/libQt5Core.so.5.6.2
    /home/adam/miniconda3/pkgs/qt-5.6.2-2/lib/libQt5Core.so.5
    /home/adam/miniconda3/pkgs/qt-5.6.2-2/lib/libQt5Core.so.5.6
    /home/adam/miniconda3/pkgs/qt-5.6.2-2/lib/libQt5Core.so.5.6.2
    /home/adam/miniconda3/pkgs/qt-5.6.2-3/lib/libQt5Core.so.5
    /home/adam/miniconda3/pkgs/qt-5.6.2-3/lib/libQt5Core.so.5.6
    /home/adam/miniconda3/pkgs/qt-5.6.2-3/lib/libQt5Core.so.5.6.2
    /home/adam/miniconda3/pkgs/qt-5.6.2-4/lib/libQt5Core.so.5
    /home/adam/miniconda3/pkgs/qt-5.6.2-4/lib/libQt5Core.so.5.6
    /home/adam/miniconda3/pkgs/qt-5.6.2-4/lib/libQt5Core.so.5.6.2
    /home/adam/miniconda3/pkgs/qt-5.6.2-5/lib/libQt5Core.so.5
    /home/adam/miniconda3/pkgs/qt-5.6.2-5/lib/libQt5Core.so.5.6
    /home/adam/miniconda3/pkgs/qt-5.6.2-5/lib/libQt5Core.so.5.6.2
    /opt/mendeleydesktop/lib/qt/libQt5Core.so.5
    /opt/qt.5.5.1/lib/libQt5Core.so.5
    /opt/qt.5.5.1/lib/libQt5Core.so.5.5
    /opt/qt.5.5.1/lib/libQt5Core.so.5.5.1
    /usr/lib/rstudio/bin/libQt5Core.so.5
    /usr/lib/rstudio/bin/libQt5Core.so.5.4.2
    /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
    /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.9
    /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.9.2
    ➜  ~ locate ibQt5DBus.so.5 
    /home/adam/.aspera/connect/lib/libQt5DBus.so.5
    /home/adam/Downloads/Persepolis/qt-everywhere-opensource-src-5.5.1/qtbase/lib/libQt5DBus.so.5
    /home/adam/Downloads/Persepolis/qt-everywhere-opensource-src-5.5.1/qtbase/lib/libQt5DBus.so.5.5
    /home/adam/Downloads/Persepolis/qt-everywhere-opensource-src-5.5.1/qtbase/lib/libQt5DBus.so.5.5.1
    /home/adam/Programs/foxitsoftware/lib/libQt5DBus.so.5
    /home/adam/Programs/foxitsoftware/lib/libQt5DBus.so.5.3
    /home/adam/Programs/foxitsoftware/lib/libQt5DBus.so.5.3.2
    /home/adam/miniconda3/envs/Python_27/lib/libQt5DBus.so.5
    /home/adam/miniconda3/envs/Python_27/lib/libQt5DBus.so.5.6
    /home/adam/miniconda3/envs/Python_27/lib/libQt5DBus.so.5.6.2
    /home/adam/miniconda3/lib/libQt5DBus.so.5
    /home/adam/miniconda3/lib/libQt5DBus.so.5.6
    /home/adam/miniconda3/lib/libQt5DBus.so.5.6.2
    /home/adam/miniconda3/pkgs/qt-5.6.2-2/lib/libQt5DBus.so.5
    /home/adam/miniconda3/pkgs/qt-5.6.2-2/lib/libQt5DBus.so.5.6
    /home/adam/miniconda3/pkgs/qt-5.6.2-2/lib/libQt5DBus.so.5.6.2
    /home/adam/miniconda3/pkgs/qt-5.6.2-3/lib/libQt5DBus.so.5
    /home/adam/miniconda3/pkgs/qt-5.6.2-3/lib/libQt5DBus.so.5.6
    /home/adam/miniconda3/pkgs/qt-5.6.2-3/lib/libQt5DBus.so.5.6.2
    /home/adam/miniconda3/pkgs/qt-5.6.2-4/lib/libQt5DBus.so.5
    /home/adam/miniconda3/pkgs/qt-5.6.2-4/lib/libQt5DBus.so.5.6
    /home/adam/miniconda3/pkgs/qt-5.6.2-4/lib/libQt5DBus.so.5.6.2
    /home/adam/miniconda3/pkgs/qt-5.6.2-5/lib/libQt5DBus.so.5
    /home/adam/miniconda3/pkgs/qt-5.6.2-5/lib/libQt5DBus.so.5.6
    /home/adam/miniconda3/pkgs/qt-5.6.2-5/lib/libQt5DBus.so.5.6.2
    /opt/mendeleydesktop/lib/qt/libQt5DBus.so.5
    /opt/mendeleydesktop/lib/qt/libQt5DBus.so.5.5
    /opt/mendeleydesktop/lib/qt/libQt5DBus.so.5.5.1
    /opt/qt.5.5.1/lib/libQt5DBus.so.5
    /opt/qt.5.5.1/lib/libQt5DBus.so.5.5
    /opt/qt.5.5.1/lib/libQt5DBus.so.5.5.1
    /usr/lib/rstudio/bin/libQt5DBus.so.5
    /usr/lib/rstudio/bin/libQt5DBus.so.5.4.2
    /usr/lib/x86_64-linux-gnu/libQt5DBus.so.5
    /usr/lib/x86_64-linux-gnu/libQt5DBus.so.5.9
    /usr/lib/x86_64-linux-gnu/libQt5DBus.so.5.9.2
    ➜  ~ locate libQt5Gui.so.5
    /home/adam/.aspera/connect/lib/libQt5Gui.so.5
    /home/adam/Downloads/Persepolis/qt-everywhere-opensource-src-5.5.1/qtbase/lib/libQt5Gui.so.5
    /home/adam/Downloads/Persepolis/qt-everywhere-opensource-src-5.5.1/qtbase/lib/libQt5Gui.so.5.5
    /home/adam/Downloads/Persepolis/qt-everywhere-opensource-src-5.5.1/qtbase/lib/libQt5Gui.so.5.5.1
    /home/adam/Programs/foxitsoftware/lib/libQt5Gui.so.5
    /home/adam/Programs/foxitsoftware/lib/libQt5Gui.so.5.3
    /home/adam/Programs/foxitsoftware/lib/libQt5Gui.so.5.3.2
    /home/adam/miniconda3/envs/Python_27/lib/libQt5Gui.so.5
    /home/adam/miniconda3/envs/Python_27/lib/libQt5Gui.so.5.6
    /home/adam/miniconda3/envs/Python_27/lib/libQt5Gui.so.5.6.2
    /home/adam/miniconda3/lib/libQt5Gui.so.5
    /home/adam/miniconda3/lib/libQt5Gui.so.5.6
    /home/adam/miniconda3/lib/libQt5Gui.so.5.6.2
    /home/adam/miniconda3/pkgs/qt-5.6.2-2/lib/libQt5Gui.so.5
    /home/adam/miniconda3/pkgs/qt-5.6.2-2/lib/libQt5Gui.so.5.6
    /home/adam/miniconda3/pkgs/qt-5.6.2-2/lib/libQt5Gui.so.5.6.2
    /home/adam/miniconda3/pkgs/qt-5.6.2-3/lib/libQt5Gui.so.5
    /home/adam/miniconda3/pkgs/qt-5.6.2-3/lib/libQt5Gui.so.5.6
    /home/adam/miniconda3/pkgs/qt-5.6.2-3/lib/libQt5Gui.so.5.6.2
    /home/adam/miniconda3/pkgs/qt-5.6.2-4/lib/libQt5Gui.so.5
    /home/adam/miniconda3/pkgs/qt-5.6.2-4/lib/libQt5Gui.so.5.6
    /home/adam/miniconda3/pkgs/qt-5.6.2-4/lib/libQt5Gui.so.5.6.2
    /home/adam/miniconda3/pkgs/qt-5.6.2-5/lib/libQt5Gui.so.5
    /home/adam/miniconda3/pkgs/qt-5.6.2-5/lib/libQt5Gui.so.5.6
    /home/adam/miniconda3/pkgs/qt-5.6.2-5/lib/libQt5Gui.so.5.6.2
    /opt/mendeleydesktop/lib/qt/libQt5Gui.so.5
    /opt/qt.5.5.1/lib/libQt5Gui.so.5
    /opt/qt.5.5.1/lib/libQt5Gui.so.5.5
    /opt/qt.5.5.1/lib/libQt5Gui.so.5.5.1
    /usr/lib/rstudio/bin/libQt5Gui.so.5
    /usr/lib/rstudio/bin/libQt5Gui.so.5.4.2
    /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
    /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5.9
    /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5.9.2

    发现一个很有意思的事情:我们要得库文件系统/usr/lib/x86_64-linux-gnu/下有一份,Miniconda 有一份,我们编译出的/opt/qt.5.5.1/lib/有一份,还有哪里呢,/usr/lib/rstudio/bin//opt/mendeleydesktop/lib/qt/。这个就有意思了,就是说库其实好多份,好,系统有的和 Miniconda 的不说,版本不对,我们自己编译的不说。软件自己竟然带了一份,那就有个便利了,那就是说理论上我们编译这些库完全是多此一举,因为我们完全可以直接链接到软件自带的库啊,这样的话不用说库版本绝对没问题。

所以我们需要干嘛呢,export LD_LIBRARY_PATH要么使用自己编译出来的 Qt 库,要么使用软件自己带的库。我试验了下,两种办法都可以。

我仔细看了之前的博客,不知道为什么竟然没有提到LD_LIBRARY_PATH的事情,但是最后libfcitxplatforminputcontextplugin.so链接到了/opt下我自己编译的库文件,想来我中间可能export过但是自己忘了,现在才发现这个才是最重要的步骤啊。惭愧。

madlogos commented 6 years ago

楼主牛逼。Ubuntu下的这个千年老问题也靠你的办法解决了。

yihui commented 6 years ago

猛人! 💪

JackieMium commented 6 years ago

@yihui 竟然被谢老师钦点猛人,我可以拿去吹牛了hah。很喜欢你的博客,加了书签的。

panhaoyu commented 6 years ago

哇!!谢谢大佬!!三个小时!我折腾了两天了也没整明白!知道应该重编译,无奈没用过qt完全不会弄,直接用了大佬的库太棒了!大佬可以考虑去你在RStudio Support的贴子后面更新一下你的这个repo,不然真的有点难找呢,就RStudio没加入Debian仓库,我一直以为它不开源,没想到在github上面去找,要不然可以省下不少时间的!百度搜不到github的内容的,这么好的方法,不广而告之实在是对不起大佬的一片心血呀!有时间的话,最好搬到CSDN上,可能方便更多的朋友呢!

JackieMium commented 6 years ago

@panhaoyu 只是做了小小的工作。谢谢夸奖。

RStudio 团队一直不理这个问题,我这个只是个 workaround,不想再写到那里去。CSDN 排版我看不上,有帐号但是没开博客。这个本来也就是我自己方便建个博客和 repo 放点东西而已。搜技术性问题的话,Google /Bing 都比百度结果好,为什么一定要吊死在百度的树上呢。

panhaoyu commented 6 years ago

唉刚刚搜一个问题,百度怎么都没有,Google解决。。真的差距这么大。。谢谢大佬指点!

yinflying commented 6 years ago

Update: Mendeley has update to 1.19.1 and solve the PDF font mess problem when reading Chinese papers. However, its bundled qt version has also updated to qt5.10.1.

Actually, Qt releases its binary package, so we needn't make efforts to compile it.

Ref Mendeley Fcitx Problem

JackieMium commented 6 years ago

@yinflying 原 po 主大驾光临啊

zenggyu commented 6 years ago

感谢楼主@JackieMium的精彩分享。我基于楼主最后的发现,略过了QT的编译,直接在终端里运行export LD_LIBRARY_PATH="/usr/lib/rstudio/bin/",并顺利地通过了对fcitx-qt5源码进行的cmake .操作;然而,在运行make时,却出现了以下错误(我使用的操作系统是Ubuntu 18.04):

[  0%] Built target fcitx-scan-addons.target
[  1%] Automatic MOC for target FcitxQt5DBusAddons
[  2%] Automatic MOC for target FcitxQt5WidgetsAddons
[ 17%] Built target fcitx-compile-mo.target
[ 19%] Automatic MOC for target fcitxplatforminputcontextplugin
[ 19%] Built target FcitxQt5DBusAddons_autogen
[ 19%] Built target fcitx-modules.target
[ 19%] Built target FcitxQt5WidgetsAddons_autogen
[ 29%] Built target FcitxQt5WidgetsAddons
[ 42%] Built target FcitxQt5DBusAddons
[ 44%] Automatic MOC for target fcitx-quickphrase-editor5
[ 45%] Automatic MOC for target fcitx-qt5-gui-wrapper
[ 45%] Built target fcitx-quickphrase-editor5_autogen
[ 47%] Generating ui_editor.h
[ 48%] Generating ui_editordialog.h
/usr/lib/qt5/bin/uic: /usr/lib/rstudio/bin/libQt5Core.so.5: version `Qt_5' not found (required by /usr/lib/qt5/bin/uic)
quickphrase-editor/CMakeFiles/fcitx-quickphrase-editor5.dir/build.make:69: recipe for target 'quickphrase-editor/ui_editor.h' failed
make[2]: *** [quickphrase-editor/ui_editor.h] Error 1
make[2]: *** 正在等待未完成的任务....
/usr/lib/qt5/bin/uic: /usr/lib/rstudio/bin/libQt5Core.so.5: version `Qt_5' not found (required by /usr/lib/qt5/bin/uic)
quickphrase-editor/CMakeFiles/fcitx-quickphrase-editor5.dir/build.make:61: recipe for target 'quickphrase-editor/ui_editordialog.h' failed
make[2]: *** [quickphrase-editor/ui_editordialog.h] Error 1
CMakeFiles/Makefile2:684: recipe for target 'quickphrase-editor/CMakeFiles/fcitx-quickphrase-editor5.dir/all' failed
make[1]: *** [quickphrase-editor/CMakeFiles/fcitx-quickphrase-editor5.dir/all] Error 2
make[1]: *** 正在等待未完成的任务....
[ 48%] Built target fcitx-qt5-gui-wrapper_autogen

AutoMoc subprocess error
------------------------
moc failed for
  "/mnt/download/fcitx-qt5/platforminputcontext/main.h"

Command
-------
/usr/lib/qt5/bin/moc -I/mnt/download/fcitx-qt5/platforminputcontext/fcitxplatforminputcontextplugin_autogen/include -I/usr/include/x86_64-linux-gnu/qt5/QtGui/5.9.5 -I/usr/include/x86_64-linux-gnu/qt5/QtGui/5.9.5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtCore/5.9.5 -I/usr/include/x86_64-linux-gnu/qt5/QtCore/5.9.5/QtCore -I/mnt/download/fcitx-qt5/platforminputcontext -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtDBus -I/usr/include -DQT_CORE_LIB -DQT_DBUS_LIB -DQT_GUI_LIB -DQT_NO_DEBUG --include /mnt/download/fcitx-qt5/platforminputcontext/fcitxplatforminputcontextplugin_autogen/moc_predefs.h -o /mnt/download/fcitx-qt5/platforminputcontext/fcitxplatforminputcontextplugin_autogen/EWIEGA46WW/moc_main.cpp /mnt/download/fcitx-qt5/platforminputcontext/main.h

Output
------
/mnt/download/fcitx-qt5/platforminputcontext/main.h:32: Parse error at "IID"

platforminputcontext/CMakeFiles/fcitxplatforminputcontextplugin_autogen.dir/build.make:57: recipe for target 'platforminputcontext/CMakeFiles/fcitxplatforminputcontextplugin_autogen' failed
make[2]: *** [platforminputcontext/CMakeFiles/fcitxplatforminputcontextplugin_autogen] Error 1
CMakeFiles/Makefile2:963: recipe for target 'platforminputcontext/CMakeFiles/fcitxplatforminputcontextplugin_autogen.dir/all' failed
make[1]: *** [platforminputcontext/CMakeFiles/fcitxplatforminputcontextplugin_autogen.dir/all] Error 2
Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2

你有遇到这种情况吗?我的操作有没有偏离你原文的意思?

JackieMium commented 6 years ago

@zenggyu 仔细看我的文章,编译 fcitx-qt5 不仅仅需要 LD_LIBRARY_PATH,还有 PATH 里要有 qt。

我试验了一下,只有 export LD_LIBRARY_PATH=/usr/lib/rstudio/bin:$LD_LIBRARY_PATH 就会出现你这个错误,加上 export PATH=/opt/qt.5.4.2.rstudio/Qt5.4.2/5.4/gcc_64/bin:$PATH 就可以顺利编译,并且我试验过输入法也确实能用。这是我刚刚编译出来的,可以看到确实链接到 RStudio 的 Qt 库了:

➜ ll /usr/lib/rstudio/bin/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so
-rwxr-xr-x 1 root root 462K Jul 15 12:47 /usr/lib/rstudio/bin/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so

➜ ldd /usr/lib/rstudio/bin/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so 
    linux-vdso.so.1 (0x00007ffc99bed000)
    libQt5Gui.so.5 => /usr/lib/rstudio/bin/libQt5Gui.so.5 (0x00007f1df0587000)
    libQt5DBus.so.5 => /usr/lib/rstudio/bin/libQt5DBus.so.5 (0x00007f1df0502000)
    libxkbcommon.so.0 => /usr/lib/x86_64-linux-gnu/libxkbcommon.so.0 (0x00007f1df02a2000)
    libQt5Core.so.5 => /usr/lib/rstudio/bin/libQt5Core.so.5 (0x00007f1defd59000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f1defbd6000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1defa40000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f1defa26000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1def869000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f1def848000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f1def62a000)
    libGL.so.1 => /usr/lib/x86_64-linux-gnu/libGL.so.1 (0x00007f1def39e000)
    libicui18n.so.55 => /usr/lib/rstudio/bin/libicui18n.so.55 (0x00007f1deef3a000)
    libicuuc.so.55 => /usr/lib/rstudio/bin/libicuuc.so.55 (0x00007f1deeba6000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f1deeba1000)
    libglib-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f1dee88b000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f1dee881000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f1df0bc5000)
    libGLX.so.0 => /usr/lib/x86_64-linux-gnu/libGLX.so.0 (0x00007f1dee64d000)
    libGLdispatch.so.0 => /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007f1dee397000)
    libicudata.so.55 => /usr/lib/rstudio/bin/libicudata.so.55 (0x00007f1dec8e0000)
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f1dec66e000)
    libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f1dec330000)
    libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f1dec11c000)
    libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f1debef4000)
    libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f1debcf0000)
    libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f1debaea000)
    libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f1deb8d3000)

同时我也试验过 export LD_LIBRARY_PATH=/usr/lib/rstudio/bin:$LD_LIBRARY_PATH + export PATH=/usr/lib/rstudio/bin:$PATH 这样的组合,同样也是无法编译通过的。其实这个很明显,编译不仅需要相关库文件,还需要 qt 编译器相关的东西。而 RStudio 带的只是那些库文件,你看一下 /usr/lib/rstudio/bin 和编译的或者我提到的 RStuio 提供的二进制 qt 的对应文件夹都有什么区别对比一下就很清楚了:

➜ ls /usr/lib/rstudio/bin 
diagnostics          libQt5Gui.so.5               libQt5Qml.so.5.4.2         libQt5WebKit.so.5             plugins
libicudata.so.55     libQt5Gui.so.5.4.2           libQt5Quick.so.5           libQt5WebKit.so.5.4.2         postback
libicudata.so.55.1   libQt5Network.so.5           libQt5Quick.so.5.4.2       libQt5WebKitWidgets.so.5      qt.conf
libicui18n.so.55     libQt5Network.so.5.4.2       libQt5Sensors.so.5         libQt5WebKitWidgets.so.5.4.2  r-ldpath
libicui18n.so.55.1   libQt5OpenGL.so.5            libQt5Sensors.so.5.4.2     libQt5Widgets.so.5            rpostback
libicuuc.so.55       libQt5OpenGL.so.5.4.2        libQt5Sql.so.5             libQt5Widgets.so.5.4.2        rsclang
libicuuc.so.55.1     libQt5Positioning.so.5       libQt5Sql.so.5.4.2         libQt5XmlPatterns.so.5        rsession
libQt5Core.so.5      libQt5Positioning.so.5.4.2   libQt5Svg.so.5             libQt5XmlPatterns.so.5.4.2    rstudio
libQt5Core.so.5.4.2  libQt5PrintSupport.so.5      libQt5Svg.so.5.4.2         libQt5Xml.so.5                rstudio-backtrace.sh
libQt5DBus.so.5      libQt5PrintSupport.so.5.4.2  libQt5WebChannel.so.5      libQt5Xml.so.5.4.2
libQt5DBus.so.5.4.2  libQt5Qml.so.5               libQt5WebChannel.so.5.4.2  pandoc
# 都是库文件

➜ ls /opt/qt.5.4.2.rstudio/Qt5.4.2/5.4/gcc_64/bin 
assistant  lupdate               qdbuscpp2xml    qhelpgenerator  qmlbundle         qmlplugindump  qtdiag     xmlpatterns
designer   moc                   qdbusviewer     qlalr           qmleasing         qmlprofiler    qtpaths    xmlpatternsvalidator
lconvert   pixeltool             qdbusxml2cpp    qmake           qmlimportscanner  qmlscene       rcc
linguist   qcollectiongenerator  qdoc            qml             qmllint           qmltestrunner  syncqt.pl
lrelease   qdbus                 qhelpconverter  qml1plugindump  qmlmin            qmlviewer      uic
# 都是可执行文件
zenggyu commented 6 years ago

你的解答非常清晰,谢谢!

现在rstudio的github repo中的dependencies/linux/install-qt-sdk似乎已经不再包含编译好的qt二进制文件地址,因而无法根据你之前写的方法操作。根据现版本install-qt-sdk脚本的内容,我只能找到https://s3.amazonaws.com/rstudio-buildtools/qt-unified-linux-x64-3.0.5-online.run这个程序。这个程序可以提供特定版本的qt并进行下载安装,无需编译。以5.11.1版为例,进行下载安装后,安装目录下的./5.11.1/gcc_64/bin应该包含了所需的编译器文件,无需自行编译。但在同时设定LD_LIBRARY_PATHPATH后,make仍然会出错:

[  0%] Built target fcitx-scan-addons.target
[  0%] Built target fcitx-modules.target
[  1%] Automatic MOC for target FcitxQt5DBusAddons
[  1%] Built target FcitxQt5DBusAddons_autogen
[ 14%] Built target FcitxQt5DBusAddons
[ 16%] Automatic MOC for target FcitxQt5WidgetsAddons
[ 16%] Built target FcitxQt5WidgetsAddons_autogen
[ 26%] Built target FcitxQt5WidgetsAddons
[ 27%] Automatic MOC for target fcitx-qt5-gui-wrapper
[ 27%] Built target fcitx-qt5-gui-wrapper_autogen
[ 29%] Generating ui_mainwindow.h
/usr/lib/qt5/bin/uic: /usr/lib/rstudio/bin/libQt5Core.so.5: version `Qt_5' not found (required by /usr/lib/qt5/bin/uic)
guiwrapper/CMakeFiles/fcitx-qt5-gui-wrapper.dir/build.make:61: recipe for target 'guiwrapper/ui_mainwindow.h' failed
make[2]: *** [guiwrapper/ui_mainwindow.h] Error 1
CMakeFiles/Makefile2:594: recipe for target 'guiwrapper/CMakeFiles/fcitx-qt5-gui-wrapper.dir/all' failed
make[1]: *** [guiwrapper/CMakeFiles/fcitx-qt5-gui-wrapper.dir/all] Error 2
Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2

google上显示的一些类似问题的解决方案似乎与此问题无关。这又不知道是哪出了岔子。用linux真的要经得起折腾才行。

JackieMium commented 6 years ago

UPDATE:确实是你装的 Qt 版本的原因,我用 https://s3.amazonaws.com/rstudio-buildtools/qt-unified-linux-x64-3.0.5-online.run 这个装了 Qt 5.4.2,然后 PATH 指定到这个 Qt,LD_LIBRARY_PATH 仍然用 RStudio 的,编译正常,出来的 libfcitxplatforminputcontextplugin.so 也可用。

以下为原回复:

@zenggyu 我看了 RStudio 的 repo,他们确实换了 qt,但是我尝试下载 https://s3.amazonaws.com/rstudio-buildtools/qt-unified-linux-x64-3.0.5-online.run 这个文件时始终都是下到中间就超时,我的网络可能连 AWS 不是很稳定。现在暂时无法尝试。 我初步觉得你的问题应该在于你装错了 Qt 版本。我们现在的问题就出在 RStudio 和系统 Qt 版本不对应所以导致输入法不能用,所以我的这个折腾过程的初衷就是要在 RStudio 所使用的 Qt 版本工具和库文件下编译出能用的 libfcitxplatforminputcontextplugin.so,而如果你使用了非 RStudio 所使用的 Qt 版本,就算编译出 libfcitxplatforminputcontextplugin.so 可能也还是不能用。

所以我现在的建议是先用 Qt-5.4.2 (你如果使用最新的 RStudio 稳定版的话应该是这个版本,当然你也可以自己在软件菜单栏 关于 里确认)试一下。同时在设置 PATHLD_LIBRARY_PATH 时也请打开一个新的终端开始操作,同时 export 时请把你所要用的东西放在前面确保它们会被先找到(参考我上面的格式),export之后请再 echo 一下确认二者确实如你所想。

zenggyu commented 6 years ago

多谢楼主提醒。

我想在这里补充一些关于编译fcitx-qt5的问题,给遇到类似问题的人借鉴。楼主提到,编译该源代码之前需要安装extra-cmake-modules, libxkbcommon-dev, fcitx-libs-dev几个包,否则会报错。我发现除了楼主提到的包之外,在我新装的Ubuntu 18.04系统上,还必须安装cmake, libqt5xmlpatterns5-dev, qtbase5-dev这几个包(注:我在安装这些依赖的时候没有做记录,这些包是我从bash命令历史中翻出来的,我不确定是否都是必要的,但看名字应该是)才能顺利完成编译,否则还是会报错。

另外,大家可以到楼主发的issue上点赞、留言,可能可以提高这个issue的优先度。

JackieMium commented 6 years ago

@zenggyu 依赖这个问题因为每个人的机器上自己装的东西都不一样,而 fciyx-qt5 也没有提到依赖情况,所以我是不可能一一列举的。举例来说,比我我装了另外一个 A 包依赖 fcitx-libs-dev 的话那它就被自动装上了,所以这次我就没碰到缺这个包的问题。但是总体来说这些东西如果缺了会报错,拿报错信息 Google 一下一般很容易找到解决办法。

Sent from my ONEPLUS A3010 using FastHub

BriFuture commented 5 years ago

@zenggyu 遇到和你类似的问题,我用 QtCreator 编译 fcitx-qt5 项目就能在构建生成的 build-fcitx/platforminputcontext/ 目录下得到 libfcitxplatforminputcontextplugin.so 文件了

JackieMium commented 5 years ago

@zenggyu 遇到和你类似的问题,我用 QtCreator 编译 fcitx-qt5 项目就能在构建生成的 build-fcitx/platforminputcontext/ 目录下得到 libfcitxplatforminputcontextplugin.so 文件了

你这就是 fcitx 开发者那个博客写的了,我也提到了。就是 A case study: how to compile a Fcitx platforminputcontext plugin for a proprietary software that uses Qt 5

BlurryLight commented 5 years ago

感谢博主. 最新版本的Qt Creator用的是Qt5.12编译的,用系统提供的Fcitx-frontend-qt5提供的so文件已经不能兼容了.在Github中寻找源码正准备重新编译的时候碰见博主的repo,抱着试试看的心情没想到成功了. XD