Qt FATAL: Cannot mix incompatible Qt library (version ..) with this library (version ...)

問題

以下のような表示が出る。

$ virtualbox
Qt FATAL: Cannot mix incompatible Qt library (version 0x50c02) with this library (version 0x50d00)
fish: “virtualbox” terminated by signal SIGABRT (Abort)

原因・対処

Qt関連ライブラリのバージョンがモジュール(?)間で異なることが原因。0x50c02 = 5.12.2、0x50d00 = 5.13.0 と読める。 ldd で実行したいバイナリが使っているQt系の共有ライブラリ(.so)を出してやって、それぞれのバージョンを確認すればよい。

$ ldd /usr/lib/virtualbox/VirtualBox | rg -i qt
    libQt5Core.so.5 => /usr/lib/libQt5Core.so.5 (0x00007ffff4e26000)
    libQt5Gui.so.5 => /usr/lib/libQt5Gui.so.5 (0x00007ffff4844000)
    libQt5Widgets.so.5 => /usr/lib/libQt5Widgets.so.5 (0x00007ffff41ad000)
    libQt5PrintSupport.so.5 => /usr/lib/libQt5PrintSupport.so.5 (0x00007ffff4138000)
    libQt5OpenGL.so.5 => /usr/lib/libQt5OpenGL.so.5 (0x00007ffff40df000)
    libQt5X11Extras.so.5 => /usr/lib/libQt5X11Extras.so.5 (0x00007ffff3c49000)

どの共有ライブラリがどのパッケージでインストールされたかは以下のようにして確認できる(ArchLinuxの場合)。この場合は qt5-svg, qt5-multimedia をアップデートすれば動作した。

$ pacman -Qo /usr/lib/libQt* | rg 5.12
/usr/lib/libQt5Multimedia.prl is owned by qt5-multimedia 5.12.2-1
/usr/lib/libQt5Multimedia.so is owned by qt5-multimedia 5.12.2-1
/usr/lib/libQt5Multimedia.so.5 is owned by qt5-multimedia 5.12.2-1
/usr/lib/libQt5Multimedia.so.5.12 is owned by qt5-multimedia 5.12.2-1
...
/usr/lib/libQt5MultimediaWidgets.so.5.12.2 is owned by qt5-multimedia 5.12.2-1
/usr/lib/libQt5Svg.prl is owned by qt5-svg 5.12.2-1
/usr/lib/libQt5Svg.so is owned by qt5-svg 5.12.2-1
/usr/lib/libQt5Svg.so.5 is owned by qt5-svg 5.12.2-1
/usr/lib/libQt5Svg.so.5.12 is owned by qt5-svg 5.12.2-1
/usr/lib/libQt5Svg.so.5.12.2 is owned by qt5-svg 5.12.2-1

VirtualBoxをアップグレードしてつまづいたのでメモ。ldd, gdb とかを普段のトラブル解決に取り込めるようになってきた。