完整错误如下

$ ./sscom 
./sscom: /usr/lib/qt5lib/libQt5Core.so.5: version `Qt_5.9' not found (required by ./sscom)
./sscom: /usr/lib/qt5lib/libQt5Core.so.5: version `Qt_5.9' not found (required by /usr/lib/x86_64-linux-gnu/libQt5SerialPort.so.5)

在14.04还能运行,到18.04上已经不能支持了,编译是成功了的。但是运行不起来。遇到这种错误是比较恼火的,看字面意思是libQt5Core.so.5中并不包含5.9,那就可能是5.8以下的,我换下去看看。

$ readelf -s /usr/lib/qt5lib/libQt5Core.so.5
5633: 0000000000000000     0 OBJECT  GLOBAL DEFAULT  ABS Qt_5.0
5634: 0000000000000000     0 OBJECT  GLOBAL DEFAULT  ABS Qt_5.1
5638: 0000000000000000     0 OBJECT  GLOBAL DEFAULT  ABS Qt_5.2
5639: 0000000000000000     0 OBJECT  GLOBAL DEFAULT  ABS Qt_5.3
5645: 0000000000000000     0 OBJECT  GLOBAL DEFAULT  ABS Qt_5.4
5648: 0000000000000000     0 OBJECT  GLOBAL DEFAULT  ABS Qt_5.5
5652: 0000000000000000     0 OBJECT  GLOBAL DEFAULT  ABS Qt_5.6
5657: 0000000000000000     0 OBJECT  GLOBAL DEFAULT  ABS Qt_5.7
5663: 0000000000000000     0 OBJECT  GLOBAL DEFAULT  ABS Qt_5.8
...

还真就猜测对了,只到5.8。default也不好使了,18.04自带的libQt5SerialPort.so.5使用的是Qt5.9而自带的Qt库却只支持5.8以下,类似生活中的鞋不合脚了,也可能Ubuntu官方的开发者没有人测试到这个问题。继续看看其他libQt5Core.so.5是否支持到5.9

$ locate libQt5Core.so.5

结果

/usr/lib/qt5lib/libQt5Core.so.5
/usr/lib/qt5lib/libQt5Core.so.5.8
/usr/lib/qt5lib/libQt5Core.so.5.8.0
/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.5

也不用使用readelf就可以查到最新版本的库。使用/usr/lib/x86_64-linux-gnu/就可以了。

最终的解决方案如下:

export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:$LD_LIBRARY_PATH

再运行,就不报错了

./sscom