开发环境:
Ubuntu18.04 + cups-2.2.7
最终要将cups-2.2.7替换为cups-.2.3.3
好,在编译完cups后,对系统的cups进行替换,,此操作已完成。。。。
接下来,启动cups,发现启动失败。。
紧接着执行 journalctl -f -u cups,追踪错误。
**这个意思就是这个动态库中没有这个函数,,,,
好,查看cups所依赖的动态库,执行命令 ldd /usr/sbin/cupsd
。
里面有一个非常关键的cups的库,libcups.so.2
。
编译cups时会生成,在 /usr/lib/libcups.so.2
;
执行命令 nm -D /usr/lib/libcups.so.2 > log
打开log可以看到 确实有这个 _cupsMessageSave
函数,,,
那为啥还报错???
执行命令 find / -name libcups.so.2
,
发现在 /usr/lib/x86_64-linux-gnu下也存在 libcups.so.2文件。
于是执行命令 nm -D /usr/lib/x86_64-linux-gnu/libcups.so.2 > log
。
打开log观察,发现没有 _cupsMessageSave
函数。
那报错就不奇怪了。。。。
/usr/lib/x86_64-linux-gnu/是干什么的???
/usr/lib/x86_64-linux-gnu/ 是一个Linux系统中存放共享库文件的默认目录,主要用于存放64位的共享库文件。共享库文件是一些程序所需的动态链接库,它们包含了程序运行所需的一些函数和操作系统调用的实现。在Linux系统中,许多程序都会使用共享库文件,因此将这些共享库文件存放在一个目录中,可以方便程序的调用和管理。
在64位Linux系统中,共享库文件通常存放在 /usr/lib/x86_64-linux-gnu/ 目录下,而32位系统中则存放在 /usr/lib/i386-linux-gnu/ 目录下。但是,有些发行版也可能将共享库文件存放在其他目录下,这取决于发行版的特定配置。
例如在麒麟V10的ARM架构上,这个目录是 /usr/lib/aarch64-linux-gnu。。
解决方案
此时将编译生成的libcups.so.2动态库拷贝替换 /usr/lib/aarch64-linux-gnu 目录下的 libcups.so.2,
或者直接将 /usr/lib/aarch64-linux-gnu下的libcups.so.2直接删除。
最后,执行 systemctl restart cups命令 重启 cups,重启成功。。
此时,我们再看看 ldd /usr/sbin/cupsd
。
cups启动成功的结果。