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 とかを普段のトラブル解決に取り込めるようになってきた。