[Share Experiences] 动态库安装到错误地方导致的错误(亲身经历)
Tofloor
poster avatar
坐井观天下
deepin
2023-04-18 15:24
Author

最近在学习Qt数据库开发,由于系统安装有openGauss数据库docker容器,便想测试一下通过ODBC访问。于是安装了unixodbc,在openGauss官网下载了odbc驱动(实际上是openEuler系统版本的,按道理不应该随便用),按照提示复制到了/usr/local/lib下面,结果惹了麻烦!

首先,终端里运行sudo,出现PAM:未知模块错误,重启系统后用户无法登录,输完用户名就提示incorrect login。好在还有一个V23系统,启动V23挂载20.9分区后,查看/var/log/auth.log,提示找不到/lib/security/pam_deepin_authentication.so,实际上此文件位于/lib/x86_64-linux-gnu/security下面。

其次在/var/log/daemon.log中还发现spark-update-notifier服务启动错误,curl: relocation error: /lib/x86_64-linux-gnu/libcurl.so.4: symbol MTLSv1_1_client_method version OPENSSL_1_1_0 not defined in file libssl.so.1.1 with link time reference

在网上查了一些资料,试着把PAM配置文件中的/etc/pam.d/common-auth的含有pam_deepin_authentication.so的那行注释掉。重启系统恢复正常,可以登录。最终通过ldd、ldd-config等命令研究明白,是因为把openGauss ODBC Driver文件放到了/usr/local/lib下,其中包括有动态库 /libssl.so.1.1(导致spark-update-notifier中的curl失败)以及libcrypto.so.1.1(导致PAM失败),由于/usr/local/lib是动态库搜索的第一路径,系统优先使用了这个目录下的这两个文件,而不是本应该/lib/x86_64-linux-gnu/下的对应文件。

经验教训:除了本用户目录下的文件,不要轻易删除或更改,系统库路径下慎重安装文件。Linux的优点是功能强大,应用灵活,包容性强,但某种程度上这也是它的缺点。sudo常常让我们忘记了对权力的敬畏!

Reply Favorite View the author
All Replies
晚秋(lateautumn)
Moderator
2023-04-18 19:03
#1

学习了,这两天在论坛里经常看到Qt 不知道是什么东西,特意从网上查了一下资料,但还是似懂非懂joy

Reply View the author