我最近从 16.04 升级到了 18.04,在尝试启动 qjack 时出现此错误
qjackctl: relocation error: /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5: symbol png_set_option version PNG16_0 not defined in file libpng16.so.16 with link time reference
所以我尝试重新安装 qjack、所有 qt5 库和 libpng16 库,但无济于事。所以我更深入地研究了有问题的 libpng,并检查了符号。
readelf -Ws /usr/lib/x86_64-linux-gnu/libpng16.so.16 | grep png_set_option
84: 0000000000008e00 89 FUNC GLOBAL DEFAULT 13 png_set_option@@PNG16_0
那么 png_set_option 实际上是为 PNG16_0 定义的,不是吗?我真的不知道该怎么做才能纠正这个问题。
答案1
所以我找到了 libpng16 的不同版本
locate libpng16.so.16
/home/julien/Software/Sen2Cor-2.4.0-Linux64/lib/libpng16.so.16
/home/julien/Software/Sen2Cor-2.4.0-Linux64/lib/libpng16.so.16.25.0
/home/julien/Software/VirtualGL/libpng-1.6.0/.libs/libpng16.so.16
/home/julien/Software/VirtualGL/libpng-1.6.0/.libs/libpng16.so.16.0.0
/opt/ardour4/lib/libpng16.so.16
/usr/lib/i386-linux-gnu/libpng16.so.16
/usr/lib/i386-linux-gnu/libpng16.so.16.34.0
/usr/lib/x86_64-linux-gnu/libpng16.so.16
/usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0
/usr/local/lib/libpng16.so.16
/usr/local/lib/libpng16.so.16.0.0
/usr/local/lib/libpng16.so.16.34.0
/usr/local/lib.bak/libpng16.so.16
/usr/local/lib.bak/libpng16.so.16.0.0
/usr/local/lib.bak/libpng16.so.16.34.0
我试图找到没有正确符号的库
/usr/lib/x86_64-linux-gnu$ nm -D /usr/lib/x86_64-linux-gnu/libpng16.so.16 | grep png_set_option
0000000000008e00 T png_set_option
这不会返回任何内容(符号缺失)
nm -D /usr/local/lib/libpng16.so.16 | grep png_set_option
因此,我从坏库 /usr/local/lib/libpng16.so.16 到好库 /usr/lib/x86_64-linux-gnu/libpng16.so.16 建立了一个符号链接
sudo ln -sf /usr/local/lib/libpng16.so.16 /usr/lib/x86_64-linux-gnu/libpng16.so.16
希望这能有所帮助,不幸的是,更新时可能会损坏它。不要忘记在更新之前备份 /usr/local/lib/,以防万一
sudo cp -R /usr/local/lib /usr/local/lib.bak
这个解决方案的灵感来自于此邮政