かなり疲れてるときの散歩

問題

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

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

この記事へのコメント

まだコメントはありません