![我应该如何修复由于多重命名而无法找到的库?](https://linux22.com/image/840091/%E6%88%91%E5%BA%94%E8%AF%A5%E5%A6%82%E4%BD%95%E4%BF%AE%E5%A4%8D%E7%94%B1%E4%BA%8E%E5%A4%9A%E9%87%8D%E5%91%BD%E5%90%8D%E8%80%8C%E6%97%A0%E6%B3%95%E6%89%BE%E5%88%B0%E7%9A%84%E5%BA%93%EF%BC%9F.png)
我已经遇到过几次这个问题了。我有一个程序正在寻找一个库,但找不到它,即使它在 中/usr/lib/x86_64-linux-gnu
。
也许这是依赖程序编写方式的一个缺陷。我对此不太了解,但我希望依赖程序指定库的名称,并让系统搜索路径列表。
有人可以简单解释一下 Ubuntu 如何期望一个行为正常的程序来寻找动态库吗?
举一个具体的例子,最新的案例涉及libpcsclite.so
库。Oracle 文档建议 Java(依赖程序)将在我的系统内/usr/lib64
和/usr/local/lib64
系统上查找 - 两者都不存在。我过去在非 Java 依赖项方面也遇到过类似的问题。我的问题之一是,为什么程序会列出这样的搜索位置?Linux 是否提供了可以替代的搜索机制?
这是 Java 的问题吗?可以使用其sun.security.smartcardio.library
系统属性来纠正,还是pcsclite
无法正确支持多架构命名约定?如果是后者,我应该手动创建符号链接,还是可以使用类似这样的工具ldconfig
来修复?
答案1
我猜问题在于你正在安装 apt (apt-get) 之外的软件包。要么使用 Ubuntu 软件包 (如果可能的话使用 ppa),要么如果你正在编译软件包,那么在编译时,使用./configure --help
并指定库路径作为配置的一部分。
也可以看看:
http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
来自第二个链接:
CFLAGS="-I/path/to/your/headers" LDFLAGS="-L/path/to/your/lib" ./configure --blah
如果您需要进一步的帮助,您必须更具体地说明“某个程序正在寻找库但找不到它” - 什么程序?您是如何安装它的?等等。
要设置你的 Java 环境,请编辑~/.pam_environment
、添加:
export JAVA_HOME=/usr/java/<your version of java>
export PATH=${PATH}:${JAVA_HOME}/bin
对于所有用户(系统)编辑/etc/environment
也可以看看:https://help.ubuntu.com/community/EnvironmentVariables#Persistent_environment_variables