所以我正在运行一个大学在 Debian 上编写的程序。当我这样做时,会出现以下错误:
error while loading shared libraries: libmysqlclient.so.20: cannot open shared object file: No such file or directory
由于搜索结果不同,我尝试安装以下软件包:
apt-get install libmariadbclient-dev-compat
apt-get install default-libmysqlclient-dev
apt-get install mysql-common
搜索如下:
find . -name 'libmysqlclient*'
locate libmysqlclient.so
没有得到任何输出。
我使用 yum 找到了一个假定的修复方法,但由于我使用的是 debian,所以这对我来说不是一个解决方案。我发现 .20 是关于 Oracle MySQL 5.7 的内容(https://community.centminmod.com/threads/libmysqlclient-so-missing.9052/)
有人知道如何解决这个问题吗?提前致谢。
答案1
显然,该程序是针对从 www.mysql.com 下载的 MySQL 版本编译的;libmysqlclient.so.20 在 Debian 中不可用。
您可以从以下位置下载 .deb 文件:https://dev.mysql.com/downloads/file/?id=477124配置您的 Debian(基于)系统以访问 www.mysql.com apt 存储库。然后您可以更新 apt 数据:
# apt-get update
并安装正确的库:
# apt-get install libmysqlclient20
请注意,这可能会删除您的 Debian 版本的 MySQL(如果已安装)!所以仔细考虑一下你想要什么。
另一种方法是浏览 apt 存储库,然后手动下载 libmysqlclient20 .deb。解压这个,例如:
# dpkg-deb --extract libmysqlclient20_5.7.23-1debian9_amd64.deb /tmp/libmysqlclient20
然后,您可以将 libmysqlclient.so.20 复制到搜索共享库的某个位置,例如 /usr/local/lib/ ,它应该可以工作。
答案2
如果其他人在 Ubuntu 20.04 上遇到此问题,您只需添加旧的存储库,其中将包含libmysqlclient20
您的 APT 源(类似于吉利亚银的回答。
sudo tee /etc/apt/sources.list.d/xenial.list > /dev/null <<EOF
deb http://dk.archive.ubuntu.com/ubuntu/ xenial main
deb http://dk.archive.ubuntu.com/ubuntu/ xenial universe
deb http://dk.archive.ubuntu.com/ubuntu/ xenial-updates universe
EOF
sudo apt-get update
sudo apt-get install -y libmysqlclient20
答案3
echo "deb http://ftp.us.debian.org/debian unstable main contrib non-free" >> /etc/apt/sources.list.d/unstable.list
apt-get update
apt-get install libmysqlclient20
答案4
除了 wurtel 的正确解决方案(一种不安全、肮脏、不适合生产)之外,hacky 方法是简单地从足够接近的版本创建一个符号链接到程序正在查找的文件:
ln -s /usr/lib/libmysqulclient.so.23 /usr/local/lib/libmysqlclient.so.20
它可能有效也可能无效。大多数时候,如果源文件只是稍微新一点,那就应该没问题。当然我重申这是不安全的并且仅用于测试。